Можно ли убить приложение, не вызывая onPause()?

Я понимаю, что сохранение постоянных данных в методе onPause() — самый безопасный путь к сохранению данных, потому что onStop() не всегда будет вызываться.

Однако возможно ли, что приложение уничтожается без вызова onPause() и переходит непосредственно к onStop()?

Разве не безопаснее всего сохранять данные обоими методами onPause() И onStop()?


person the_prole    schedule 21.01.2017    source источник


Ответы (4)


Вам нужно понять, когда на самом деле вызываются onPause и onStop.

onPause вызывается всякий раз, когда приложение больше не является активным действием (на самом деле оно вызывается, как только оно перестает быть активным, но до фактического запуска следующего действия).

onStop вызывается, когда активность полностью исчезает с экрана.

Поэтому, если вызывается onStop, onPause уже будет вызван, за исключением ошибки фреймворка.

Что касается сохранения данных, то обычно работает onPause или onStop. Как правило, правило состоит в том, чтобы просто правильно сочетать вещи: onStop с onStart и onPause с onResume. Бывают ситуации, когда onPause будет вызываться, но не onStop, но обычно это происходит потому, что над вашим приложением появляется краткосрочная прозрачная фоновая активность, а не потому, что onStop никогда не будет вызываться. Таким образом, onStop используется чаще, потому что onPause заставит вас сохраняться чаще, чем необходимо.

person Gabe Sechan    schedule 21.01.2017
comment
Спасибо, но я думаю, что у CommonsWare может быть правильный ответ. - person the_prole; 21.01.2017
comment
@the_prole Да. Мы говорим об одном и том же, я объясняю, почему это так. - person Gabe Sechan; 21.01.2017

Однако возможно ли, что приложение завершается без вызова onPause() и переходит непосредственно к onStop()?

Нет. Если вызывается onStop(), то гарантируется, что будет вызван onPause().

person CommonsWare    schedule 21.01.2017

Нет, метод onPause() будет выполняться всегда. Это единственный метод, который гарантированно будет вызываться, когда ваша активность теряет фокус, останавливается или уничтожается.

person Joseph Lam    schedule 21.01.2017

Нет. Каждый раз, когда ваше приложение переходит в фоновый режим или вы меняете активность, onPause срабатывает. Нет сценария, в котором onPause не вызывается, а onStop вызывается.

Если ваше приложение выйдет из строя, ни один из двух не будет вызван.

person Andrej Jurkin    schedule 21.01.2017