Когда «onResume ()» работает без «onStart ()»? - PullRequest
0 голосов
/ 06 ноября 2018

Во время тестирования я не обнаружил ситуации, когда onStart() работает без onResume().

Если бы кто-то мог пролить свет на эту тему как , то это самый близкий вопрос Я нашел, но ни один из ответов не касается части запуска / возобновления, а только части остановки / паузы.

Если соответствующей ситуации нет, можно ли пропустить onStart() или onResume() и не использовать оба, так как это кажется излишним?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Там есть документация .

видимое время жизни действия происходит между вызовом onStart () и соответствующим вызовом onStop (). В течение этого времени пользователь может видеть активность на экране, хотя она может не находиться на переднем плане и взаимодействовать с пользователем. Между этими двумя методами вы можете поддерживать ресурсы, необходимые для отображения активности пользователю. Например, вы можете зарегистрировать BroadcastReceiver в onStart (), чтобы отслеживать изменения, влияющие на ваш пользовательский интерфейс, и отменить его регистрацию в onStop (), когда пользователь больше не видит то, что вы отображаете. Методы onStart () и onStop () могут вызываться несколько раз, поскольку действие становится видимым и скрытым для пользователя.

Время жизни переднего плана действия происходит между вызовом onResume () до соответствующего вызова onPause (). В течение этого времени действие находится перед всеми другими действиями и взаимодействует с пользователем. Деятельность может часто переходить между возобновленным и приостановленным состояниями - например, когда устройство переходит в спящий режим, когда доставляется результат активности, когда доставляется новое намерение - поэтому код в этих методах должен быть довольно легковесным.

Насколько я понимаю, onStart() и onStop() представляют видимость, в то время как onResume() и onPause() представляют приоритет.

Например, если вы откроете свое приложение, будут вызваны как onStart(), так и onResume(). Если ваше приложение все еще открыто, допустим, вы получили сообщение Facebook и открыли чат. onPause() будет вызван, но onStop() не будет. Ваше приложение больше не на переднем плане, но оно все еще видно.

EDIT:

Я знаю, что связал документацию по Деятельности, но согласно Документация по фрагментам :

onStart () делает фрагмент видимым для пользователя (в зависимости от того, какая активная операция по его запуску).

onResume () заставляет фрагмент начать взаимодействовать с пользователем (на основании возобновления его содержащей активности).

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

Фрагмент onStop () больше не виден пользователю либо потому, что его действие останавливается, либо операция фрагмента изменяет его в действии.

Применяется тот же принцип. В большинстве случаев это просто прямой вызов из Activity.

0 голосов
/ 06 ноября 2018

Два примера с моей головы:

1.) Системное диалоговое окно открывается поверх вашего приложения (например, через Intent.createChooser), но отменяется диалоговое окно

2.) Многооконный режим, нажав на другое приложение, затем нажав на ваше (вы получите onPause / onResume, но не onStop / onStart)


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

Если вы пытаетесь отобразить DialogFragment после onPause, вам обычно нужно подождать, пока onResumeFragments / onPostResume.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...