OnDestroy () вызывается при нажатии кнопки «Назад»

В моей деятельности я 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() ) . Он не вернется, если вы скроете действие другим способом, например, нажав кнопку «домой».

Intereting Posts