Какой самый «устойчивый к смерти» компонент на Android? - PullRequest
2 голосов
/ 12 апреля 2010

Я ищу наиболее подходящий класс для диспетчера для AsyncTasks, вызванных из моей Деятельности.

Я думаю, это может быть один из них:

  1. подкласс Приложение ;
  2. подкласс Сервис ;
  3. мой собственный статический материал.

Что касается меня - проще реализовать третий вариант. Но вопрос в том, будет ли он более «устойчивым к смерти», чем Сервис или Приложение? Также очень интересно, что будет жить дольше - приложение или сервис? Я предполагаю, что приложение живет так же долго, как и процесс приложения (задачи с точки зрения Android).

Так что в основном мне нужно ранжировать эти опции по их «устойчивому к смерти» качеству, потому что я бы хотел полагаться на самые «статичные» вещи.

UPDATE:

Первоначально вопрос задавался в 2010 , когда (1) Android была новой платформой для разработчиков и (2) документация Google была слишком расплывчатой ​​(в некоторых случаях она даже вводила в заблуждение) о жизненных компонентах приложения. циклы и весь жизненный цикл процесса приложения.

1 Ответ

4 голосов
/ 28 сентября 2012

Вы обязательно должны использовать Сервис .

Основная причина этого - Service имеет свой собственный документированный жизненный цикл , а приложение - нет. Экземпляр Application, как и любая из ваших статических переменных, может быть уничтожен системой практически в любое время, вы не получите никакого обратного вызова и не сможете остановить этот процесс. Таким образом, все несохраненные данные (все статические переменные) будут потеряны.

С другой стороны, Service не может быть уничтожен системой без вывода сообщений, по крайней мере, метод onDestroy() должен быть вызван первым. Имея такой обратный вызов, вы можете сохранить свое состояние в некоторой постоянной памяти (например, SharedPreferences, файл, база данных и т. Д.) И восстановить это состояние при следующем запуске приложения или службы.

...