Steepe_Hare
-
Постов
174 -
Зарегистрирован
-
Посещение
Активность репутации
-
Steepe_Hare отреагировална Brovin Yaroslav в ShowModal - почему нельзя использовать блокирующий режим?
Добрый день,
На андроиде в принципе не поддерживаются синхронные диалоги. И причина прежде всего в архитектуре андроид приложения.
Если говорить о нативном приложении, то оно состоит из двух потоков Java UI Thread (Он же главный поток приложения) и Delphi Thread. FireMonkey работает в делфи треде. В то время, как все нативные вещи (диалоги, пикеры, браузеры, карты, медиа проигрыватели и тд) все они работают в Java UI Thread. Помимо этого, когда активити (работает в так же в java UI thread) меняет своё состояние (запущена, приостановлена, остановлена, возобновлена и тд), она должна синхронизировать это состояние в делфи треде. Или другими словами передать эту информацию в делфи тред. Для передачи используются пайпы с событиями. Поэтому пока делфи тред не прочитает новое состояние активити, Java UI thread будет находится в режиме ожидания. Чтение в делфи потока нового состояния происходит в цикле ProcessMessage.
Теперь возвращаясь к диалогам. Диалоги нативные, поэтому они должны быть синхронизированы (с ожиданием) с java UI thread. С другой стороны, в момент отображения диалога происходит событие из java ui thread Window Gained Focus, возникающее, когда в приложении меняется фокус между окнами (диалоговое окно в данном случае перехватывает фокус). Но как мы выяснили, это приводит к обратной синхронизации с делфи тредом.
Отсюда возникает классический deadlock.
P.S. Это верно до версии Берлин включительно.
-
Steepe_Hare отреагировална rareMax в Проиграть несколько аудиофайлов параллельно
Мы обсуждали это в чате. К сожалению, сошлись что нужно использовать либо медиаПлееры либо через bass.dll
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в ShowModal not implemented on this platform
Нужно поменять в форме авторизации последовательность, сначала закрытие потом выполнение анонимной процедуры.
Я не проверял, но попробуйте
-
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в "Неподдерживаемый тип файла: application/apk"
в папке с проектом файл AndroidManifest.template.xml, в нем можно указать нужный SDK
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> в папке Android\<BuildConfig>\AndroidManifest.xml, можно посмотреть какой сейчас используется
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в Занимаемое место в ОЗУ
видимо как-то так, только указать нужно будет свой процесс
http://stackoverflow.com/questions/5963402/android-how-to-track-the-memory-usage-of-an-any-running-app-on-device-programm
-
Steepe_Hare отреагировална voytalexey в "Неподдерживаемый тип файла: application/apk"
А на Самсунге какая версия Андроида? Может просто созданный вами apk-файл требует версии выше чем 4.1.2
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в Красивые интерфейсы мобильных приложений
вот пару скринов проектов, по мне так не скучные
-
Steepe_Hare отреагировална krapotkin в Узнать свой Longitude и Latitude
дело в том, что запуск сервиса определения координат требует времени. значительного.
поэтому нельзя взять и написать
LocationSensor1.Active := True; Lat := LocationSensor1.Sensor.Latitude; Long := LocationSensor1.Sensor.Longitude; нужно посмотреть демо из поставки студии. там все красиво и подробно расписано
есть обработчик, который будет вызван, когда новые координаты будут получены
а пока - пишите не определено и крутите AniIndicator
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в Ресурсы и ссылки для новичка в доступе к MySQL
ребята ну сколько можно уже, одно да потому. миллион раз говорилось что для мобилки не подходит прямой доступ к БД! это не десктоп, тут совсем другой подход, не наступайте на грабли
-
Steepe_Hare отреагировална Brovin Yaroslav в Feature and bug fix list for RAD Studio 10.1 Berlin Subscription Update 2 - Anniversary Edition
Прочитать всю новость целиком на сайте Embarcadero
-
Steepe_Hare отреагировална Andrey Efimov в Файловая система Android и Embarcadero
Правильно.
Если это технические файлы, то там им и место, ну максимум в папку приложения, на сд карту вынести. Мусорить на устройстве пользователя не хорошо!
Если это например фотографии из галереи, то им в галерее место.
А так можете попробовать писать в общие папки. Если вы смотрели ссылки которые я вам кидал, то скорее всего заметили, что для общих папок в названии метода указано слово "Shared".
К сожалению, не помню, есть ли какие-то нюансы по записи в такие папки начиная с Android KitKat. В этой версии ввели жёсткие ограничения, чтобы приложения не мусорили + это дополнительная защита. Я писал про это тут Android 4.4 и запись на внешнюю карту памяти... (уже не важно, ниже дал ссылку на справку)
Попробуйте, поэкспериментируйте с путями...
p.s. Если уж совсем невмоготу, то попробуйте создать папку для приложения во внутренней памяти и там хранить все доп. файлы
Дополнение.
Вот справка на русском Сохранение файлов, собственно, там написано всё тоже самое.
-
Steepe_Hare отреагировална Rusland в Файловая система Android и Embarcadero
Надо заменить путь на .\assets\internal , тогда System.IOUtils.TPath.GetDocumentsPath
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в Скоро Новый год! Эффект снега
для Delphi полно решении, все методы и компоненты одинаковы с VCL версией. Если не получится, поправим. Только не забудьте приложить демо-проект
-
Steepe_Hare отреагировална Rusland в Компонент наподобие "Скрепка-помощник"
Можно создать некую анимацию. Например, используя TBitmapListAnimation
Вот только как объединить изображение и звук (если он есть) не знаю.
Balloon можно сделать с помощью компонента TCalloutPanel.
-
Steepe_Hare отреагировална Pax Beach в TMediaPlayer и ресурсы
Про генофонд — это правильно ;-)
Для некоммерческого использования есть библиотека BASS.
Если не ищутся Android модули, значит не все хорошо в системных путях или путях проекта:
в Browsing Path должна быть такая строчка.
Или в настройках проекта в Serch Path указать, где искать библиотеки проекта:
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в Простой пример передачи данных на сервер
Посмотрите тему про пуши, там выкладывали подобное
UPDATE:
@master webs выкладывал
-
Steepe_Hare отреагировална Rusland в Видео из картинок
Вот пример Осипова c BitmapListAnimation... но у меня почему-то картинка едет в сторону при анимации. Может кто-нибудь сможет разобраться в чем причина?
-
Steepe_Hare отреагировална Error в Когда много таймеров
Добавлю что менеджер событий - это единственное верное решение, в противном случае (куча таймеров) приложение станет настолько не детерминированным, что глюки будут лезть отовсюду, а нормальная отладка просто невозможна.
-
Steepe_Hare отреагировална Brovin Yaroslav в У меня не работает DrawBitmap
Все ясно. У вас ошибка. Посмотрите внимательно на параметры функции Canvas.DrawBitmap.
Первый прямоугольник - это область из битмапа, которую вы будите рисовать. Второй прямоугольник - это область на канве, куда вы будите выводить часть битмапа. Вот так будет правильно:
Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyBitmap.BoundsF, MyRect, 1); P.S. В следующие такие вопросы обязательно прикрепляйте ваш проект. Это сэкономит кучу времени на ненужные вопросы.
-
-
Steepe_Hare отреагировална Brovin Yaroslav в Когда много таймеров
В любом случае рост таймеров всегда будет сказывать на скорость приложения и запаздывания. Поскольку таймеры в fmx выполняются в главном потоке, то соответственно все OnTimer события будут вызываться по очереди. И чем дольше занимает выполнение этих событий, тем таймеры будут менее точны.
Предел количества таймеров не знаю :-) НО любую задачу можно выполнить несколькими способами. В вашем случае нужно просто сделать типа Менеджер расписаний, который будет базироваться на одном всего лишь таймере и в OnTimer проверять наступило ли событие или нет.
-
-
Steepe_Hare отреагировална Kitty в Благодраность
Большое спасибо Ярославу, что находит время и фиксит проблемы, которые мы тут поднимаем. И курсы его великолепные!
Спасибо профессионалам, таким как ZuBy, который терпит наши глупые вопросы и помогает.
СПАСИБО!!!
-
Steepe_Hare получил реакцию от Pax Beach в Другая система координат?
Объясните, пожалуйста, почему этот простой код работает по-разному в Win32 и на Андроиде? Картинка 150x200 в битмап уже загружена и нужно ее расчертить.
Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.Stroke.Kind := TBrushKind.Solid; Image1.Bitmap.Canvas.Stroke.Color := TAlphaColors.Blue; for I := 0 to 9 do Image1.Bitmap.Canvas.DrawLine(TPointF.Create(I * 15, 0), TPointF.Create(I * 15, Image1.Bitmap.Height), 1); for J := 0 to 9 do Image1.Bitmap.Canvas.DrawLine(TPointF.Create(0, J * 20), TPointF.Create(Image1.Bitmap.Width, J * 20), 1); finally Image1.Bitmap.Canvas.EndScene; end; Под Виндой создается точная сетка 10x10, а под Андроид как будто другая система координат и территория делится на огромные квадраты (больше, чем надо).