В моей деятельности я onDestory()
и просто поместил вызов журнала, чтобы показать, вызван ли этот метод. (Протестировано на Android 4.2.2 и 4.4.4)
@Override protected void onDestroy() { Log.i(TAG, "onDestroy() was called"); super.onDestroy(); }
Когда я нажимаю кнопку «Назад», этот метод вызывается (я видел журнал).
Я считаю, что этого не должно произойти, если телефон не потеряет память или что-то еще. У меня нет ничего особенного в приложении, кроме MainActivity и некоторых фрагментов.
Вот журнал, когда пользователь находится в MainActivity и нажимает кнопку «Назад»:
I/MainActivity? onBackPressed() was called I/MainActivity? onStop() was called I/MainActivity? onDestroy() was called
Почему это происходит?
Я также проверял isFinishing()
в onPause()
и всегда возвращает true
Из Джавадока:
Выполняйте окончательную очистку до того, как действие будет уничтожено. Это может произойти либо потому, что активность завершается (кто-то называет ее завершением, либо потому, что система временно уничтожает этот экземпляр активности, чтобы сэкономить место). Вы можете различать эти два сценария с помощью метода isFinishing. Примечание: не рассчитывайте на Этот метод называется местом для сохранения данных!
Когда вы нажмете кнопку «Назад» внутри Activity
, она назовет finish()
, которая «закроет» ее.
Activity.java
/** * Called when the activity has detected the user's press of the back * key. The default implementation simply finishes the current activity, * but you can override this to do whatever you want. */ public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } }
Когда это произойдет, onDestroy()
может (и обычно будет) вызываться.
Protected void onDestroy ()
Выполняйте окончательную очистку до того, как действие будет уничтожено. Это может произойти либо потому, что активность завершается ( кто-то называется finish () на нем , либо потому, что система временно уничтожает этот экземпляр активности для экономии места. Вы можете различать эти два сценария с методом isFinishing ().
По той же причине также объясняется, почему isFinishing()
внутри onPause()
всегда возвращает true
, если вы нажмете кнопку «Назад» (call finish()
) . Он не вернется, если вы скроете действие другим способом, например, нажав кнопку «домой».