Понимание жизненного цикла деятельности и обслуживания

Предположим, у меня есть несколько действий, например, экран A (главный экран) и экран B.

Экран A открывает экран B, а затем экран B запускает службу, которая отправляет обновления на экран B. Теперь, когда пользователь сворачивает приложение и служба работает, а поскольку ОС Android не хватает памяти, она очищает приложение.

Теперь у меня два вопроса

1) ОС Android очищает память всего приложения (экран A и экран B) или только моего экрана B?

2) Мой сервис тоже будет очищен или он продолжит работать? Если он очищен, может ли служба переднего плана с уведомлением помочь мне преодолеть это?

Любая помощь будет признательна.


person Rahulrr2602    schedule 28.05.2019    source источник


Ответы (2)


Теперь, когда пользователь сворачивает приложение и служба работает, а поскольку в ОС Android не хватает памяти, приложение очищается.

Когда Android не хватает памяти, он завершает процесс.

ОС Android очищает память всего приложения (экран A и экран B) или только моего экрана B?

По умолчанию ваше приложение использует один процесс. Итак, когда Android завершает ваш процесс, все ваше приложение исчезает.

Будет ли моя служба также очищена или она продолжит работать?

По умолчанию ваше приложение использует один процесс. Таким образом, когда Android завершит ваш процесс, ваш сервис также исчезнет. Некоторые разработчики предпочитают помещать свою службу в отдельный процесс (с помощью атрибута манифеста android:process), чтобы помочь службе оставаться дольше, но это немного усложняет создание вашего приложения.

Если он очищен, может ли служба переднего плана с уведомлением помочь мне преодолеть это?

Служба переднего плана значительно снижает вероятность того, что Android завершит процесс этой службы, чтобы освободить оперативную память системы. Однако служба должна работать только тогда, когда она активно приносит пользу пользователь.

person CommonsWare    schedule 28.05.2019
comment
Спасибо. Согласно вашему ответу, приложение убьет процесс, который включает в себя все действия и услуги. У меня есть еще одно сомнение. Предположим, у меня есть действие и служба переднего плана (тот же процесс, что и действие) с уведомлением. Тогда, если приложение убьет процесс, служба также будет прекращена? И если да, то поможет ли возврат службы STICKY немедленно воссоздать службу? - person Rahulrr2602; 29.05.2019
comment
Кроме того, наличие службы переднего плана с уведомлением или без него снижает вероятность того, что ОС Android убьет процесс моего приложения? - person Rahulrr2602; 29.05.2019
comment
@ Rahulrr2602: Тогда, если приложение убьет процесс, служба также будет остановлена? -- если служба находится в этом процессе, то служба будет уничтожена. И если да, то поможет ли возврат службы STICKY немедленно воссоздать службу? -- Я бы скорее пошел скорее, чем сразу. Предполагается, что Android создаст для вас новый процесс и перезапустит вашу службу, если она застряла. Наличие службы переднего плана с уведомлением или без него снижает вероятность того, что ОС Android убьет процесс моего приложения? -- службы переднего плана имеют файл Notification. - person CommonsWare; 29.05.2019
comment
Спасибо. Под без уведомления я на самом деле имел в виду обычное обслуживание, а не обслуживание переднего плана. Извините, это была моя ошибка. Вы развеяли все мои сомнения, кроме одного. Будет ли запуск службы переднего плана с уведомлением или обычной службой, выполняющей некоторую работу, уменьшить вероятность того, что ОС Android очистит процесс моего приложения/службы, даже если действия выполняются. - person Rahulrr2602; 29.05.2019
comment
@ Rahulrr2602: я рассказал об этом в ответе. Служба переднего плана значительно снижает вероятность того, что Android завершит процесс этой службы, чтобы освободить оперативную память системы. Не имеет значения, есть ли в этом процессе деятельность. Однако обратите внимание, что на некоторых устройствах есть свои собственные диспетчеры задач, в которых пользователи могут вручную завершать процессы, даже те, у которых есть службы переднего плана. В общем, пользователь всегда может избавиться от вашего процесса, когда захочет. - person CommonsWare; 29.05.2019
comment
Как насчет обычного обслуживания, они также уменьшат шансы на то, что ОС Android очистит процесс? - person Rahulrr2602; 29.05.2019
comment
@Rahulrr2602: В Android 8.0+ фоновая служба может работать только в течение минуты, поэтому она мало влияет на время жизни вашего процесса. На старых устройствах фоновая служба поможет поддерживать ваш процесс в рабочем состоянии, но не так сильно, как служба переднего плана. - person CommonsWare; 29.05.2019
comment
Вы упомянули, что в Android 8.0+ фоновая служба может работать только в течение минуты. Вы точно имели в виду, что он не может работать более 1 минуты, даже если процесс приложения/службы находится в списке последних или виден пользователю. Задавая этот вопрос, вы не можете найти это ограничение в документации по ограничениям фонового выполнения developer.android .com/about/versions/oreo/background - person Rahulrr2602; 29.05.2019
comment
он не может работать более 1 минуты, даже если процесс приложения/службы находится в списке последних или виден пользователю — если приложение имеет интерфейс переднего плана (например, пользователь может видеть действие), то процесс является передним планом процесс. Если приложение не имеет пользовательского интерфейса переднего плана, а служба является фоновой службой, процесс является фоновым процессом. Служба может работать только в течение 1 минуты в фоновом процессе. Обзорный экран (недавний список) не является частью переднего плана с точки зрения пользовательского интерфейса, поэтому нахождение на нем не делает процесс приложения приоритетным процессом. - person CommonsWare; 29.05.2019
comment
Спасибо Еще раз за ответ. - person Rahulrr2602; 29.05.2019

  1. ОС Android очистит все приложение, если ему потребуется память для другого приложения.

  2. Если активность уничтожена, службы внутри также будут уничтожены.

person Said    schedule 28.05.2019
comment
Спасибо за ответ. Но предположим, что у меня есть служба переднего плана, работающая с уведомлением, возвращающим NOT_STICKY, будет ли она также уничтожена? Если да, то поможет ли запуск службы из контекста приложения? Или поможет вернуть сервис STICKY? Ваш ответ будет принят через 7 минут, так как не может быть принят сейчас из-за ограничений StackOverflow. - person Rahulrr2602; 29.05.2019
comment
Да, это будет. У вас есть очень хорошее объяснение службы переднего плана и уничтожения приложений: stackoverflow.com/questions/30525784/ - person Said; 29.05.2019
comment
Спасибо за ответ. Несмотря на то, что ваш ответ был до ответа CommonsWare, я принял его ответ, поскольку он имеет лучшее объяснение, а его репутация больше, поэтому другие пользователи могут больше верить его ответу. Извините, но надеюсь, вы понимаете. - person Rahulrr2602; 29.05.2019