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

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

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

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

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

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

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

0
0
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Спасибо за ответ. Но предположим, что у меня есть служба переднего плана, работающая с уведомлением, возвращающим NOT_STICKY, будет ли она также уничтожена? Если да, то поможет ли запуск службы из контекста приложения? Или поможет вернуть сервис STICKY? Ваш ответ будет принят через 7 минут, так как не может быть принят сейчас из-за ограничений StackOverflow.

Rahulrr2602 28.05.2019 23:10

Да, это будет. У вас есть очень хорошее объяснение службы переднего плана и уничтожения приложений: stackoverflow.com/questions/30525784/…

Said 28.05.2019 23:14

Спасибо за ответ. Несмотря на то, что ваш ответ был до ответа CommonsWare, я принял его ответ, поскольку он имеет лучшее объяснение, а его репутация выше, поэтому другие пользователи могут больше верить его ответу. Извините, но надеюсь, вы понимаете.

Rahulrr2602 28.05.2019 23:32
Ответ принят как подходящий

Now when the user minimizes the app and the service is running and since Android OS is short of memory then it clears the App.

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

Does the Android OS clear the memory of the whole app (Screen A & Screen B) or only my Screen B?

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

Will my service also be cleared or will it continue to run?

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

If it is cleared then can a foreground service with a notification help me to overcome this?

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

Спасибо. Согласно вашему ответу, приложение убьет процесс, который включает в себя все действия и услуги. У меня есть еще одно сомнение. Предположим, у меня есть действие и служба переднего плана (тот же процесс, что и действие) с уведомлением. Тогда, если приложение убьет процесс, служба также будет прекращена? И если да, то поможет ли возврат службы STICKY немедленно воссоздать службу?

Rahulrr2602 28.05.2019 23:28

Кроме того, наличие службы переднего плана с уведомлением или без него снижает вероятность того, что ОС Android убьет процесс моего приложения?

Rahulrr2602 28.05.2019 23:35

@Rahulrr2602: «Тогда, если приложение убьет процесс, будет ли прекращена и служба?» -- если служба находится в этом процессе, то служба будет уничтожена. «И если да, то поможет ли возврат службы STICKY немедленно воссоздать службу?» -- Я бы сказал "скоро", а не "немедленно". Предполагается, что Android создаст для вас новый процесс и перезапустит вашу службу, если она застряла. «Наличие службы переднего плана с уведомлением или без него снижает вероятность того, что ОС Android уничтожит процесс моего приложения?» -- службы переднего плана имеют Notification.

CommonsWare 28.05.2019 23:56

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

Rahulrr2602 29.05.2019 00:30

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

CommonsWare 29.05.2019 00:34

Как насчет обычного обслуживания, они также уменьшат шансы на то, что ОС Android очистит процесс?

Rahulrr2602 29.05.2019 00:53

@Rahulrr2602: В Android 8.0+ фоновая служба может работать только в течение минуты, поэтому она мало влияет на время жизни вашего процесса. На старых устройствах фоновая служба поможет поддерживать ваш процесс в рабочем состоянии, но не так сильно, как служба переднего плана.

CommonsWare 29.05.2019 01:09

Вы упомянули, что «На Android 8.0+ фоновая служба может работать только минуту». Вы точно имели в виду, что он не может работать более 1 минуты, даже если процесс приложения/службы находится в списке последних или виден пользователю. Задавая этот вопрос, вы не можете найти это ограничение в документации по ограничениям фонового выполнения developer.android.com/about/versions/oreo/фон

Rahulrr2602 29.05.2019 12:26

«он не может работать более 1 минуты, даже если процесс приложения/службы находится в списке последних или виден пользователю» — если приложение имеет интерфейс переднего плана (например, пользователь может видеть действие), то процесс процесс переднего плана. Если приложение не имеет пользовательского интерфейса переднего плана, а служба является фоновой службой, процесс является фоновым процессом. Служба может работать только в течение 1 минуты в фоновом процессе. Обзорный экран («недавний список») является нет частью переднего плана с точки зрения пользовательского интерфейса, поэтому нахождение там не делает процесс приложения приоритетным процессом.

CommonsWare 29.05.2019 12:41

Спасибо Еще раз за ответ.

Rahulrr2602 29.05.2019 14:12

Другие вопросы по теме