Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как сделать чтобы приложение постоянно висело в памяти и не закрывалось (как будильники)


Деня

Вопрос

Добрый день! Вопрос собственно из названия темы, прошу уточнить как сделать чтобы приложение на FireMonkey для Android не закрывалось когда выходишь на рабочий стол?

Изменено пользователем Деня
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Здравствуйте.

Вообще-то выход на рабочий стол не подразумевает закрытия приложения.

Если Вы хотите, чтобы оно вообще никогда не закрывалось, то можете воспользоваться параметром Persistent в Project Options->Version Info.
Здесь подробнее.

Ссылка на комментарий
  • 0
  • Модераторы

Приложение не закрывается когда вы выходите на рабочий стол, оно продолжает висеть в памяти устройства, но уже с другим приоритетом.

Хотел было написать на эту тему статью, но ... нагло процитирую слова из первой попавшейся книжки (эту информацию можно найти в справке "Processes and Application Life Cycle"):

 

Процессы с самой низкой важностью уничтожаются первыми. Есть пять уровней в иерархии важности. Следующий список представляет их в порядке убывания важности.
 
1. Активный процесс (Foreground Process). Процесс считается активным, если выполняется любое из следующих условий:
• в процессе выполняется Activity, с которым взаимодействует пользователь;
• в процессе выполняется служба, связанная с Activity, с которым взаимодействует пользователь;
• процесс имеет объект Service, и выполняется один из методов обратного вызова, определенных в этом объекте;
• процесс имеет объект BroadcastReceiver, и выполняется его метод обратного вызова для приема Intent.
Одновременно могут существовать только несколько приоритетных процессов. Они будут уничтожены только в крайнем случае — если памяти настолько мало, что они все вместе не в состоянии продолжать работу.
 
2. Видимый процесс (Visible Process) — компонент из данного процесса еще может вызываться пользователем. Это может быть процесс Activity, который не находится в фокусе, но все еще виден пользователю. Видимым может также быть процесс службы, которая в данный момент связана с Activity, находящимся на переднем плане (или частично закрытым другим Activity). Это может произойти, например, при вызове диалога, который не занимает весь экран, когда Activity потерял фокус, но виден пользователю и находится позади диалога. Видимый процесс считается важным и не будет уничтожен, пока остаются процессы с более низким приоритетом.
 
3. Сервисный процесс (Service Process) — процесс, в котором выполняется Service и который не относится ни к одной из двух предыдущих категорий. Хотя сервисные процессы обычно не привязаны к интерфейсу, видимому пользователем, они выполняют задания, нужные пользователю, например фоновая работа медиаплеера или загрузка данных из сети, так, что система сохраняет их при наличии свободной памяти наряду со всеми активными и видимыми процессами.
 
4. Фоновый процесс (Background Process) — процесс, в котором выполняется Activity, который в настоящее время не виден пользователю. Эти процессы не имеют никакого прямого воздействия на пользовательский ввод и могут быть уничтожены в любое время, чтобы освободить память для активного, видимого или сервисного процесса. Обычно имеется много фоновых процессов, они сохраняются в списке LRU (Least Recently Used, "не использующиеся дольше всех"), чтобы гарантировать, что находящийся в конце этого списка процесс, в котором выполняется Activity, был бы уничтожен в последнюю очередь.
 
5. Пустой процесс (Empty Process) — не содержит никаких активных компонентов приложения. Единственная причина сохранять такой процесс — использовать его, как кэш, чтобы уменьшить время запуска при вызове компонента. Система уничтожает эти процессы в первую очередь.
 
 
Если в одном процессе выполняются несколько компонентов, Android определяет приоритет процесса по компоненту с самым высоким приоритетом. Например, если в процессе выполняется служба и видимый Activity. Если от некоторого процесса зависят другие процессы, его ранг также может быть увеличен.

 

 

Ссылка на комментарий
  • 0

Здравствуйте.

Вообще-то выход на рабочий стол не подразумевает закрытия приложения.

Если Вы хотите, чтобы оно вообще никогда не закрывалось, то можете воспользоваться параметром Persistent в Project Options->Version Info.

Здесь подробнее.

К сожалению с Персистентом у меня не прокатило, после выхода на рабочий стол и повторного открытия - снова срабатывает событие формы onCreate.

Ссылка на комментарий
  • 0

У меня в приложении с таймером после выхода на рабочий стол, запуска нескольких разных приложений, а затем запуска этого приложения, таймер продолжает считать и видно, что считал все это время, пока приложение не отображалось на экране. И это без персистента. Может быть у Вас причина выгрузки приложения из памяти в чем-то другом. Потребляет слишком много ресурсов, например.

Ссылка на комментарий
  • 0

uUx04wPZRSA.jpg

Расскажу более детально. Запилил клиент-серверное приложение под Андроид которое показывает где находятся мои товарищи через ЯндексКарты. Проблема в том что эта прога должна быть постоянно открыта. Подскажите как мне сделать этот процесс максимальным по важности и чтобы висел значок в верхнем левом углу чтобы юзер знал что приложение кушает его батарейку и немножко трафик.

 

//Кстати я как и многие тоже не догоняли как обновить страницу в браузере, т.к. метод "WebBrowser.Refresh"

//в ФаерМанки под Андроид отсутствует (проверял в XE 5).

//Это досадное обстоятельство обходится так:

//

//WebBrowser.Navigate(' ');

//WebBrowser.Navigate('тот же адрес сайта который у вас открытый');

Изменено пользователем Деня
Ссылка на комментарий
  • 0

Приложение грузится с самого начала даже если выйти на рабочий стол, а затем сразу вернуться в приложение? 

Нет, если сворачиваю, а потом клацаю на кнопку недавних приложений и захожу оттуда - то прога продолжает работать как будто и не закрывалась. А если очищаю этот список недавних приложений и по новой захожу - то прога запускается сначала.

Ссылка на комментарий
  • 0

И ещё: у меня таймер установлен которые каждые 30 секунд обновляет местоположение. Когда экран блокируется, то таймер срабатывает в лучшем случае - с задержкой примерно в минуту, в худшем - вообще не срабатывает пока не откроешь приложение.

Ссылка на комментарий
  • 0
  • Модераторы

 

Опция "persistent" предназначена для системных приложений.

 

Решение вашей задачи: Пишите сервис.

Прошу уточнить - как запилить сервис.

 

из коробки никак! ищите в инете костыль. но он реально костыль. ничего хорошего не получится

Ссылка на комментарий
  • 0

тут http://blog.blong.com/ почитай

Вообще почитай про особенности приложений в андроид, он если это не сервис, не активное приложение может закрыть если ему покажется, что оно много отъедает например... Что касается приложений на XE .. это ему кажется всегда практически. Поэтому описываешь сервис на Java который тебе что то всегда делает и складывает аккуратно это в файлик , а твое активити работает уже с файлом,например. Можно было бы вызывать из сервиса функцию сразу делать изменения в активити без файла и вызывать функцию из делфи кода, тогда тебе нужно обязательно перед этим сартануть активити(там ньюансы есть)...   

Изменено пользователем Syb
Ссылка на комментарий
  • 0

Добрый день! Помогите с решением проблемы... имеется терминал оплаты на android, когда отправлю функцию принять оплату картой запускается системное приложение терминала для считывания карты оплаты, производим оплату, системное приложение закрывается и отправляет статус об оплате, но в момент когда оплата проходит мое приложение остается на фоне и андроид его закрывает.

Подскажите как мне сделать что бы мое приложение оставалось в памяти и не закрывалось чтобы после оплаты я вернулся к своему приложению обработал ответ от приложения и продолжил работу. флаг persistent не помог.

терминал слабенький и возможно из-за нехватки ресурсов android закрывает фоновое приложение

Ссылка на комментарий
  • 0
В 21.07.2021 в 16:05, Евгений Деревянкин сказал:

Добрый день! Помогите с решением проблемы... имеется терминал оплаты на android, когда отправлю функцию принять оплату картой запускается системное приложение терминала для считывания карты оплаты, производим оплату, системное приложение закрывается и отправляет статус об оплате, но в момент когда оплата проходит мое приложение остается на фоне и андроид его закрывает.

Подскажите как мне сделать что бы мое приложение оставалось в памяти и не закрывалось чтобы после оплаты я вернулся к своему приложению обработал ответ от приложения и продолжил работу. флаг persistent не помог.

терминал слабенький и возможно из-за нехватки ресурсов android закрывает фоновое приложение

Firemonkey-приложения очень прожорливы, пиши на нативе

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...