Из документа Android здесь http://developer.android.com/reference/android/app/Activity.html сказано, что «Активность выходит на передний план» будет вызывать onPause()
, а «Активность больше не видна» будет вызывать onStop()
.
Разве «Активность выходит на передний план» не то же самое, что «Активность больше не видна»? Подскажите, пожалуйста, в чем разница между ними?
paused
активность полностью активна (она сохраняет всю информацию о состоянии и членах и остается прикрепленной к оконному менеджеру).stopped
Активность также сохраняет все государственные и член информации, но больше не прикреплен кwindow manager
.Ответы:
Нет, если какая-то деятельность выходит на передний план, это не обязательно означает, что другая деятельность полностью невидима. Рассмотрим следующий случай:
Здесь мы видим обе активности одновременно. Первое действие с полями скрыто другим действием, и пользователь больше не может взаимодействовать с ним. Тем не менее, это все еще видно со всеми вытекающими последствиями.
Это оставляет вопрос, какая деятельность считается полностью непрозрачной и охватывает весь экран, а какая нет. Это решение основано на окне, содержащем действие. Если у окна есть флаг
windowIsFloating
илиwindowIsTranslucent
, то считается, что действие не делает основной материал невидимым, в противном случае оно делает и будет вызыватьonStop()
вызов. Соответствующий код можно найти вcom.android.server.am.ActivityRecord
:источник
onPause()
иonStop()
. Это 100%? Если виден только один пиксель из предыдущего действия, это все ещеonPause()
?onPause()
вообще не вызывается, когда отображается диалоговое окно.onPause()
вызывается только когда я нажимаю кнопку домой . Как это возможно?Если вы все еще видите какую-либо его часть (
Activity
выход на передний план либо не занимает весь экран, либо она несколько прозрачна),onPause()
будет вызван вызов. Если вы не можете увидеть какую-либо его часть,onStop()
будет вызван.Диалог **, например, может не охватывать весь предыдущий
Activity
, и это будет время дляonPause()
вызова.** Я не имею в виду диалог Android здесь, а скорее концептуальную идею чего-то, что всплывает и только затемняет часть пользовательского экрана. Это примечание было добавлено для уточнения на основе комментария от @GMsoF ниже
источник
Dialog
, как в классе Android. Однако то, к чему я пришел, частично скрывает первое,Activity
что иллюстрирует идею о том, что все новоеActivity
не должно полностью покрывать предыдущее.Нахождение на переднем плане означает, что деятельность имеет фокус ввода. Например, активность может быть видимой, но частично скрытой диалогом, который имеет фокус. В таком случае
onPause()
будет называться, но нетonStop()
. Когда диалог исчезнет,onResume()
будет вызван метод действия (но неonStart()
).источник
onPause()
вызывается, когда устройство переходит в спящий режим или когда появляется диалоговое окно» . Поскольку этот поток становится ясно, однако, диалог не обязательно означает , что деятельность приостановлена (хотя это было бы, скажем, в деятельности , показанной в виде диалога ).На практике следует учитывать разницу между «onPause ()» и «onPause () + onStop ()».
Всякий раз, когда происходит какое-то новое действие, оно занимает часть экрана. Таким образом, ваша ранее запущенная активность все еще видна до некоторой степени. В этом случае ранее запущенное действие не переносится в Back Stack. Итак, здесь вызывается только метод onPause () .
С другой стороны, если какое-то новое действие происходит и занимает весь экран, так что ранее выполненное действие исчезает. В этом случае ваше ранее запущенное действие перемещается в Back Stack. Здесь вызываются onPause () + onStop ().
К резюме-
onPause () - экран частично покрыт другими новыми действиями. Деятельность не перемещается в Back Stack.
onPause () + onStop () - Экран полностью покрыт другими новыми действиями. Активность перемещена в Back Stack.
Узнайте больше о Back Stack .
источник
Вкратце:
onStop()
предыдущего жизненного цикла метод вызывается, когда отображается другое действие. Когда у вас есть диалог в верхней части деятельности, тамonPause()
вызывается.Примечание . Действия - это те компоненты, которые заполняют весь экран.
Примечание . Диалоги не являются активностью, поскольку они не полностью заполняют экран.
источник
Я столкнулся со многими проблемами с методами onPause и onStop, и поэтому я проясню три сценария, с которыми я столкнулся:
1. При нажатии на кнопку недавнего приложения не вызывается метод жизненного цикла, но вызывается onWindowFocusChanged (boolean hasFocus) со значением hasFocus прошло как ложное. В версии для Android до 5, метод onPause используется для вызова при нажатии кнопки недавнего приложения.
2. Когда над вашей активностью появляется всплывающее окно, похожее на действие, как упоминал Малкольм , вызывается кнопка onPause. Если вызывается новая активность, занимающая весь экран, то onStop вызывается для предыдущей активности. Диалог разрешений Android также заставляет вашу активность вызывать OnPause.
3.Если время ожидания вашего экрана истекло, вызывается onPause. Через некоторое время, если вы не откроете экран, будет вызван onStop.
Также одна важная вещь, упомянутая ateiob, которая завершает ответ
Надеюсь, поможет.
источник
всякий раз, когда начинается новая ДЕЯТЕЛЬНОСТЬ, предыдущая деятельность
onPause
будет вызываться вызывающе при любых обстоятельствах.на самом деле будет два обстоятельства:
1- часть предыдущего действия видима или новое действие прозрачно: только
onPause
будет вызвано.2- предыдущая деятельность полностью покрыта новой деятельностью: и так
onPause
иonStop
будет называться---- Хорошо бы отметить некоторые заметки:
ПРИМЕЧАНИЕ 1: если диалог начинается поверх действия, ни один из
onPause
илиonStop
не будет вызван.ПРИМЕЧАНИЕ 2: если это Activity, темой которой является диалог, поведение будет таким же, как и обычное действие.
ПРИМЕЧАНИЕ 3: очевидно, системный диалог, такой как диалог разрешений, поскольку зефир будет вызывать
onPause
.источник
Да, я пытаюсь понять, и я могу объяснить это ниже:
Есть 2 действия: ActivityA и ActivityB
Здесь упражнение B. Следуйте за моим комментарием в коде
Надеюсь это понятно
источник