Android: Activity.onDestroy () не вызывается, когда Dalvik убивает эту активность - PullRequest
9 голосов
/ 29 декабря 2011

Я в замешательстве насчет Activity.onDestroy(). Мне нужно освободить некоторые ресурсы, когда моя активность уничтожена, но похоже, что onDestroy () вызывается только тогда, когда я нажимаю клавишу «Назад», а не когда моя активность убита Далвиком. Я проверил это, просто добавив журнал:

Log.v("my_tag", "onDestroy() called");

и то же самое в методе onCreate ():

Log.v("my_tag", "onCreate() called");

Затем я начинаю свою активность и вижу в логах: onCreate() called. Я нажимаю клавишу «Назад» и затем снова запускаю «Активность», затем вижу:

onDestroy() called
onCreate() called 

Затем я нажимаю клавишу «Домой» и снова захожу в свою активность, журналы не меняются. Все в порядке.

Затем я снова нажимаю клавишу «Домой» и запускаю действительно «тяжелые» приложения. В логах ничего нет о onDestroy (), но когда я снова запускаю свою активность, я вижу в логах: onCreate() called! Итак, onDestroy () не был вызван, но моя активность была убита. Что не так?

1 Ответ

8 голосов
/ 29 декабря 2011

Из документации onDestroy () :

[..] Бывают ситуации, когда система просто завершает процесс хостинга действия, не вызывая этот метод (или любые другие).), поэтому его нельзя использовать для выполнения задач, которые должны остаться после завершения процесса.

В Android вы не получите гарантированный вызов onDestroy().
Если вы хотите освободить некоторые ресурсы, вы должны сделать это в onPause().

...