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

Таким образом их естественная реакция скачать программу, которая  убивает «ненужные» задачи.Это действие приносит больше вреда, чем пользы, убивая задачи, которые не готовы к этому. Я действовал точно также со своим первым смартфоном. Через несколько недель я понял, что если я прекращу использовать Task Killer и полностью деинсталлирую его, то мой телефон на самом деле начнет работать лучше. Я понимаю, что могут быть краткосрочные выгоды от принудительной очистки задач, но вы все равно должны найти время, чтобы прочитать следующую информацию от разработчиков Google Android.

Внизу также будет TL;DNR (Too Long; Did Not Read) версия.

Информация из первых рук

Итак, цитаты от разработчиков Google :

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

Поставщик содержимого (content provider) активен только тогда, когда она отвечает на запрос от ContentResolver. И радиовещательный приемник (broadcast receiver) активен только тогда, когда он отвечает на широковещательные сообщения. Таким образом, нет никакой необходимости явно закрывать эти компоненты.

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

  • Активность может быть закрыта вызовом метода finish().
  • Работа одной активности ( начатая вызовом startActivityForResult() ) может быть прекращена вызовом в другой активности finishActivity().
  • Служба может быть остановлена ​​путем вызова метода stopSelf() или Context.stopService ().

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

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

Жизненный цикл активности

У каждого экземпляра Activity имеется жизненный цикл. Во время этого жизненного цикла активность переходит между тремя возможными состояниями:

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

 

Жизненный цикл активности

Жизненный цикл активности

Если активность приостановлена ​​или остановлена, то система может либо завершить ее, вызвав метод  finish(), либо просто убить процесс. Когда активность снова отображается пользователю, то она должна быть полностью перезагружена и восстановлена в своем прежнем состоянии.

Читать ещё :   Android так же безопасен как iPhone

 

TL;DNR

Итак, теперь краткая версия для тех, кому некогда читать.

  • Android жестко закодирован, чтобы автоматически убить задачу, когда требуется дополнительная память.
  • Android жестко закодирован, чтобы автоматически убить задачу, когда это необходимо.
  • Android жестко закодирован, чтобы автоматически убить задачу, если пользователь не возвращается к ней в течение длительного времени.
  • Большинство сервисов (возможно работающих в фоновом режиме) используют очень мало памяти, когда они не активны.
  • Content provider делает что-то, если есть уведомление, что надо что-то сделать. В противном случае он использует очень мало памяти.
  • Убийство процесса, когда он не готов к этому, только заставляет его перезагрузиться и начать с нуля, когда он потребуется снова.
  • Поскольку вероятно, что задача работает в фоне, её «отстрел» вызовет повторную загрузку в память, как только активность вызовет её снова.
  • «Отстрел» определенных процессов может иметь нежелательные побочные эффекты. Например, вы не получите текстовые сообщения, сигнал будильника не будет выключен.
  • Единственный правильный способ предотвратить выполнение чего-то вообще на телефоне, это  удалить соответствующее приложение.
  • Большинство приложений будут завершаться самостоятельно, если вы выходите из него нажав кнопку «Назад» пока оно не закроется, а не после нажатия кнопки «Домой». Но даже с нажатием «Домой»  Android  в конечном счете закроет приложение, как только оно пробудет в фоновом режиме некоторое время.

Дополнительно

По материалам xda-developers.com, книги «Android программирование для профессионалов» 2изд.  2016, Б. Харди, Б. Филлипс и др.

Дополнительное чтение «Мультизадачность в Android».