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
Как уменьшить размер приложения android для firemonkey? Android разблокировать экран намерения? Измените данные пакета намерений до того, как активность будет восстановлена ​​после изменения ориентации Дождитесь разрешения пользователя Должен ли findviewbyid вызываться в потоке пользовательского интерфейса? Android-виджет AppBarLayout всегда приходит на первое место Плагин не поддерживает версию кордовы-андроида этого проекта. Cordova-андроид: 4.1.1, сбойная версия:> = 5.0.0-dev Как настроить потоковое видео в прямом эфире на мобильный сервер wowza? Как реализовать обратные вызовы с помощью IntentService на Android? Как отлаживать сценарии UIAutomator с помощью Eclipse Android 4.1.2 браузер по умолчанию – проблема рендеринга с отключенными полями ввода JQueryMobile: есть ли data-transition = "slideback" или аналогичный? Android NDK: нет правила, чтобы сделать цель Сертификат доверия OkHttp Код аутентификации Google Сервера делает ошибку входа