Как предотвратить вызов onDestroy () после onPause ()? - PullRequest
2 голосов
/ 19 декабря 2011

В моем приложении для Android я заметил, что при нажатии клавиши «назад», после onPause () автоматически вызывается onDestroy ().

Как запретить приложению вызывать onDestroy () после onPause ()?

Я не хочу уничтожать экземпляры после нажатия клавиши "Назад".

При нажатии клавиши "Назад" мой объект веб-просмотра разрушается.Итак, я больше не могу получить доступ к веб-представлению, как только я нажимаю клавишу возврата.

У меня есть два URL.Представьте их как URL1 и URL2.

Когда я запускаю URL1 в веб-просмотре и нажимаю клавишу возврата, поток включается onKeyDown () -> onPause ()

Когда я запускаю URL2 в веб-просмотре и нажимаюКлавиша «назад» - поток onKeyDown () -> onPause () -> onDestroy ()

Почему существует разница в поведении?Имеет ли это какое-либо отношение к файлам cookie?

Для URL1 - cookies.isSecure = true;

Для URL2 - cookies.isSecure = false;

Ответы [ 7 ]

3 голосов
/ 20 декабря 2011

Проверьте декларацию своей деятельности в Манифесте. Объявите это таким образом, чтобы он мог хранить данные при свертывании.

Активность должна иметь возможность восстанавливать контент.

3 голосов
/ 19 декабря 2011

Так устроен жизненный цикл Activity в Android, и вы не должны мешать ему.Ваше приложение может быть уничтожено во время выполнения в любой момент времени, независимо от того, хотите вы этого или нет :) Поэтому лучшим подходом было бы приспособить жизненный цикл к логике вашего приложения.

2 голосов
/ 19 декабря 2011

вы можете переопределить onBackPressed() в своей активности, но это должно быть последним средством,

получите представление об этих ссылках перед началом

жизненный цикл активности

блог разработчика

1 голос
/ 05 августа 2013

вы можете переопределить finish (), чтобы избежать этого:

@Override
public void finish() {
    //super.finish(); // do not call super
    moveTaskToBack(true); // move back
}
0 голосов
/ 04 марта 2016

Ответ здесь указывает, что мы должны настроить манифест таким образом, чтобы он не разрушался, но он не отвечает на то, как его настроить.Я пришел на этот пост, когда у меня была похожая проблема, решение довольно простое.Просто упомяните

android:persistent="true"

Ссылка: - https://developer.android.com/guide/topics/manifest/application-element.html

Это должно предотвратить разрушение вашей деятельности, когда вы нажимаете кнопку "назад"

Я подробно объяснил случай использования вдругой пост,

Предотвратите разрушение активности как можно дольше

Надеюсь, это поможет другим, кто прибудет в это место с той же проблемой

0 голосов
/ 15 июня 2013

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

0 голосов
/ 19 декабря 2011

Обычное поведение приложения для Android гласит, что кнопка «Домой» скрывает приложение на заднем плане (вам будет показан домашний экран), а кнопка «Назад» завершает работу приложения (проходит через onPause, onStop, onDestroy в указанном порядке).

Если вы хотите сохранить экземпляры / состояния вашего приложения, когда нажата кнопка «Назад», я предлагаю вам сохранить в onPause - сохранить состояния в SharedPreferences или в каком-либо месте вашей базы данных sqlite. Но имейте в виду, что процесс сохранения должен быть максимально быстрым, потому что ваше приложение будет ждать, пока onPause выполнится полностью, прежде чем выйти.

Затем загрузите ваши экземпляры / состояния в onResume.

...