OnCreate() против OnStart()

Возможный дубликат:
Разница между onCreate() и onStart() ?
Жизненный цикл активности Android - Для чего все эти методы?

В чем разница между OnCreate и OnStart?

Насколько я понимаю, OnCreate вызывается только при первом открытии приложения и больше никогда не вызывается. Это правда? Может ли кто-нибудь уточнить своими словами, а не копировать и вставлять определение? Спасибо!


person Josh Beckwith    schedule 17.09.2012    source источник
comment
developer.android.com/reference/android/app/Activity.html   -  person sissonb    schedule 18.09.2012
comment
stackoverflow.com/questions/8515936/   -  person asteri    schedule 18.09.2012
comment
Насколько я понимаю, OnCreate вызывается только при первом открытии приложения. - Не путайте термины "приложение", "приложение" и Activity. Приложение все еще может работать, даже когда Activity уничтожено, и после уничтожения Activity будет снова «создано» и, следовательно, onCreate(...) будет вызвано снова, независимо от того, работают ли другие компоненты приложения или нет.   -  person Squonk    schedule 18.09.2012


Ответы (5)


Пока ваше устройство не прерывает активность, например, из-за нехватки системных ресурсов, каждый раз, когда вы выходите из своего приложения и возвращаетесь обратно, вызывается onStart. Однако, если процесс приложения будет убит, то при возврате onCreate будет вызван снова, потому что все ваши ресурсы будут освобождены.

person DaveJohnston    schedule 17.09.2012
comment
Технически это не так. Когда вы говорите «потеря фокуса», это может произойти при появлении всплывающего окна (диалога). Activity по-прежнему будет виден и будет просто приостановлен, а не остановлен. Когда всплывающее окно будет закрыто, основной Activity будет возобновлен. - person Squonk; 18.09.2012

Документация серьезно — я не шучу — имеет очень, очень красивое изображение, которое описывает, как работает жизненный цикл Activity (как он начинается, работает и заканчивается).

Изображение, непосредственно связанное здесь, в основном говорит следующее:

  • onCreate() вызывается при создании Activity; то есть он запущен или запущен. (Кроме того, это срабатывает при изменении ориентации.) Он вызывается снова, когда процесс уничтожается, а затем возвращается.
  • onStart() вызывается после onCreate() при запуске. Кроме того, он также вызывается при переходе к приложению после onStop() (и после onRestart()), что происходит после того, как Activity больше не отображается (то есть в то время, когда «пользователь может видеть действие на экране , хотя он может быть не на переднем плане и не взаимодействовать с пользователем").

Диаграмма, честно говоря, объясняет это лучше, чем я, менее чем в 1000 слов.

person Eric    schedule 17.09.2012
comment
Потрясающий! Большое спасибо Эрик! Однако еще один вопрос к вам; Нужно ли мне; setContentView (R.layout.activity); в OnStart? Или это избыточно, так как он уже есть в моем OnCreate? - person Josh Beckwith; 18.09.2012
comment
@JoshBeckwith Вам это нужно только при создании макета. С этим можно безопасно справиться только в onCreate(). - person Eric; 18.09.2012

Возможно, лучше всего это объяснить, начав с противоположных функций: onDestroy и onStop.

onDestroy вызывается, когда действие удаляется или закрывается. При следующем открытии вызывается onCreate.

onStop вызывается всякий раз, когда приложение выходит из поля зрения и больше не отображается. Обычно это вызвано тем, что новая активность создается поверх старой. Когда активность снова становится видимой, вызывается onStart.

Диаграмма на этой странице действительно хорошо объясняет различные состояния, в которых может находиться действие, а также соответствующие методы перехода: http://developer.android.com/training/basics/activity-lifecycle./starting.html

person David Underwood    schedule 17.09.2012

Почти. onCreate обычно вызывается при запуске приложения, но также может вызываться, если действие уничтожается/освобождается по другим причинам. По сути, если вы хотите выполнить однократную настройку действия, вам следует переопределить onCreate. Если вы хотите что-то делать каждый раз, когда пользователь переходит к Activity, вы должны переопределить onStart. Если вы хотите что-то делать каждый раз, когда Activity становится видимым/активным, используйте onResume. Если вы хотите выполнить однократную настройку для всего приложения, т. е. запускать его только один раз КОГДА-ЛИБО, вам следует использовать onCreate, но проверьте, выполнили ли вы эту настройку, и делайте это только в том случае, если вы этого не сделали.

Ознакомьтесь с очень полезной диаграммой на этой странице: справочник действий.

person Joe K    schedule 17.09.2012

На этом веб-сайте представлено четкое графическое представление жизненного цикла Android: http://developer.android.com/training/basics/activity-lifecycle/starting.html

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

Важно отметить, что onStart() не вызывается после того, как приложение просто теряет фокус из-за чего-то вроде диалога. В таких ситуациях вызывается onPause(), а затем onResume(), когда фокус восстанавливается.

person Jack Satriano    schedule 17.09.2012