2010-06-14 2 views
7

Мне интересен жизненный цикл андроидной активности, и я хотел бы получить более подробное описание/документацию/ссылку, чем широко доступные базовые (onCreate-> onStart-> onResume) one.Детальный жизненный цикл андроид (onAttachedToWindow())

Моя потребность исходит из осознания того, что начиная с новой активности (Theme.Dialog в стиле) от onAttachedToWindow() значительно улучшает время отклика, если сравнивать его с onCreate(). Интересно, как этот onAttachedToWindow() вписывается в весь жизненный цикл активности Android. Официальное описание API ref «Вызывается, когда окно подключено к оконному менеджеру» не очень помогает.

+0

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

+0

Да, я сделал это (onAttachedToWindow() идет после onResume()). Но это не дает ответа на то, что именно происходит? * И * почему такая разница в отзывчивости? *. – Ralkie

+0

Когда начинается событие OnCreate? Когда я устанавливаю точку останова в начале события OnCreate, поэтому приложение запускает и загружает активность на экран, тогда точка останова активируется, и приложение переходит в паузу. Мне нужно событие о деятельности, которая активируется точно до инициализации и запуска активности. –

ответ

4

Мое предположение о том, почему это чувствует себя более отзывчивым, с моей головы: Я думаю, что если вы начнете Activity B из операции A onCreate(), операция A не будет нарисована до начала действия B, что может привести к другому второй или два (что делает приложение менее отзывчивым), где, если вы начинаете действие B в ActivityA's onAttachedToWindow(), A запускается и отображается до того, как B стартует, поэтому пользователю не нужно сидеть в течение секунды с пустой экран или активность до А, прежде чем увидеть реакцию на их действие.

+0

Ваши объяснения, похоже, соответствуют тому, что происходит, но я до сих пор не понимаю, зачем делать * больше работы * (pre-A> A.onCreate(), A.onStart(), A.onResume(), A. onAttachedToWindow()> B) быстрее, чем запуск B из A.onCreate() (pre-A> A.onCreate()> B). Время загрузки от pre-A до B равно <1s и ~ 7s соответственно. – Ralkie

0
  1. Когда действие запущено, вызывается метод onCreate(). В методе onCreate() вы выполняете основную логику запуска, которая должна произойти только один раз в течение всего срока действия.

  2. После выполнения onCreate() вызывается метод onStart(). Этот метод делает активность видимой, так как приложение готовит действие для входа на передний план и становится интерактивным.

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

  4. Если другое действие входит в передний план , вызывается метод onPause(). Приложение приостановлено, если оно еще видно. Этот метод только приостанавливает операции операции. Он не разрушает. Действие остается в приостановленном состоянии до тех пор, пока активность не возобновится или не станет полностью невидимой для пользователя. 4a. Если пользователь возвращается к активности, метод onResume() вызывается снова. 4b. процесс приложения может быть убит из приостановленного состояния, если приложения с более высоким приоритетом нуждаются в памяти. Если пользователь должен вернуться в приложение после того, как он был убит, метод onCreate() вызывается снова

  5. Если активность больше не виден пользователю, метод onStop() называется. Когда действие остановлено, объект активности хранится в памяти и сохраняет все состояние и информацию, но не привязан к оконному менеджеру. 5a. если пользователь возвращается к активности, вызывается метод onRestart(), за которым следует метод onStart(). 5b. процесс приложения может быть убит из состояния остановки, если приложения с более высоким приоритетом нуждаются в памяти.Если пользователю нужно вернуться в приложение после его уничтожения, то снова вызывается метод onCreate().

  6. Если деятельность завершается или убивается системой, вызывается метод onDestroy(). Приложение изначально не отключается. Система либо вызывает этот метод, потому что действие заканчивается из-за чьего-то вызова finish(), либо потому, что система временно уничтожает процесс, содержащий операцию, чтобы сэкономить место. Эта система может также вызвать этот метод при изменении ориентации, а затем немедленно вызвать onCreate(), чтобы воссоздать процесс (и компоненты, которые он содержит) в новой ориентации. Метод onDestroy() освобождает все ресурсы, которые еще не были выпущены более ранними методами, такими как onStop().

весь срок службы из активности происходит между первым вызовом onCreate() через один окончательного вызова onDestroy().

видимый срок службы из активности не происходит между вызовом onStart() до вызова onStop().

Срок переднего плана из деятельности не происходит между вызовом onResume() до вызова onPause().

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

https://developer.android.com/guide/components/activities/activity-lifecycle.html#asem

onAttachedToWindow вызывается, когда вид прикрепляется к окну. В этот момент у него есть Поверхность и начнется рисование.

https://developer.android.com/reference/android/view/View.html#onAttachedToWindow()

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