2010-07-24 12 views
6

Это нормально.onStop() не получает вызов, когда я нажимаю кнопку «Назад»

документы говорят

«OnStart() и OnStop() методы могут вызываться несколько раз, так как чередуется активность между быть видимым и невидимо для пользователя»

Когда я нажимаю кнопку назад он вернется к предыдущей деятельности, которая полностью покрывает старую.

Что здесь происходит?

+0

Можете ли вы показать нам фрагмент соответствующего кода, который вы используете для отслеживания метода onStop? – Cristian

ответ

0

Вы хотите onPause(), а не onStop(). onStop вызывается непосредственно перед тем, как действие будет уничтожено, когда система будет низкой в ​​памяти. onPause вызывается всякий раз, когда пользователь переходит от вашей активности. См. Диаграмму на http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle.

+6

Спасибо, на диаграмме сказано: «Активность больше не видна», а затем происходит onStop(), так что значит «больше не видно»? Я бы подумал, что переход к активности означает, что больше не видно. – jax

+0

В моем понимании, андроид делает различие между «другой деятельностью на переднем плане» (вызывается onPause, но ваша деятельность продолжает иметь виртуальную машину и работает), а «активность больше не видна, потому что ее скоро будут убиты» (onStop, а позже, onDestroy называется). Поэтому onPause будет вызываться каждый раз, когда ваша активность будет скрыта, а onStop называется реже. Это всего лишь мой взгляд на вещи и, вероятно, несколько неточно, но андроидные документы говорят: «Первичное время жизни активности происходит между вызовом onResume до соответствующего вызова onPause». – QRohlf

+0

Что я могу сделать, если моя активность предназначена только для ОДИНОЧНОГО ИСПОЛЬЗОВАНИЯ Как мне выйти и покинуть виртуальную машину каждый раз, когда вызывается onPause ... см. Мой вопрос по адресу http://stackoverflow.com/questions/13928591/a-strange-behavior- of-android-activities-fragments-and-intent – aProgrammer

0

Если вам все еще нужны те, которые вызываются для вашего экземпляра активности при создании нового экземпляра, вы можете использовать this hacky solution. Просто выполните свою логику в #doStopOperation() и #doDestroyOperation() вместо #onStop() и #onDestroy() - и обязательно вызовите super # onStop() и super # onDestroy() из ваших переопределенных методов. Очевидно, что при расширении этой активности вам не нужно расширять AppCompatActivity, вместо этого вы можете использовать обычную деятельность. Это работает для меня в сборке, поэтому, надеюсь, это поможет.

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

2

onStop() вызывается каждый раз, когда действие больше не отображается. Итак, когда нажата кнопка «Назад», onStop() на самом деле называется.

Простая проверка, - необходимо поставить точки останова в onStop()/onStart() обратные вызовы и запустить сеанс отладки.

ЗАМЕЧАНИЕ, что onStop() текущей деятельности, скорее всего, будет называться ПОСЛЕ onStart()/onResume() операции, в которую вы переключаете.

Следовательно, я думаю, что вы пытались что-то обновить в onStop() 1-го действия и ожидали получить обновленные данные в onStart() из 2-го действия, вызвавшие ошибки.

Смежные вопросы