Разница между onStart() и onResume()
Я не могу понять значение onStart() переходное состояние. Элемент onResume() метод всегда вызывается после onStart(). Почему это не может быть onResume() вызывается после onRestart() и onCreate() методы просто кроме onStart()? Какова его цель?
почему мы не можем жить без onStart(). Я все еще считаю его избыточным (вероятно, потому, что не понимаю его смысла полностью).
11 ответов:
почему это не может быть onResume() вызывается после onrestart() и onCreate() методы просто исключая onStart()? Какова его цель?
хорошо, поскольку мой первый ответ был довольно длинным, я не буду продлевать его дальше, поэтому давайте попробуем это...
public DriveToWorkActivity extends Activity implements onReachedGroceryStoreListener { } public GroceryStoreActivity extends Activity {}ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: я намеренно пропустил призывы к таким вещам, как
super.onCreate(...)etc. Это псевдокод, так что дайте мне художественную лицензию здесь. ;)методы
DriveToWorkActivityследовать...protected void onCreate(...) { openGarageDoor(); unlockCarAndGetIn(); closeCarDoorAndPutOnSeatBelt(); putKeyInIgnition(); } protected void onStart() { startEngine(); changeRadioStation(); switchOnLightsIfNeeded(); switchOnWipersIfNeeded(); } protected void onResume() { applyFootbrake(); releaseHandbrake(); putCarInGear(); drive(); } protected void onPause() { putCarInNeutral(); applyHandbrake(); } protected void onStop() { switchEveryThingOff(); turnOffEngine(); removeSeatBeltAndGetOutOfCar(); lockCar(); } protected void onDestroy() { enterOfficeBuilding(); } protected void onReachedGroceryStore(...) { Intent i = new Intent(ACTION_GET_GROCERIES, ..., this, GroceryStoreActivity.class); } protected void onRestart() { unlockCarAndGetIn(); closeDoorAndPutOnSeatBelt(); putKeyInIgnition(); }хорошо, так что это еще один длинный (извините люди). Но вот мое объяснение...
onResume()это когда я начинаю водить иonPause()- это когда я прихожу к временной остановке. Поэтому я еду, а затем достигаю красного света, поэтому я останавливаюсь...загорается зеленый свет, и я продолжаю. Еще один красный свет, и я останавливаюсь, затем зеленый, поэтому я продолжаю. ЭлементonPause() -> onResume() -> onPause() -> onResume()петля является жесткой и происходит много раз через мое путешествие.цикл от остановки обратно через a перезапуск (подготовка к продолжению моего путешествия), чтобы начать снова, возможно, менее распространен. В одном случае я замечаю продуктовый магазин и
GroceryStoreActivityзапускается (заставляя меняDriveToWorkActivityдоonStop()). Когда я возвращаюсь из магазина, я иду черезonRestart()иonStart()затем продолжить свое путешествие.я мог бы поставить код в
onStart()наonCreate()иonRestart()и не утруждайте себя переопределениемonStart()вообще, но тем больше, что нужно сделать междуonCreate() -> onResume()иonRestart() -> onResume(), чем больше я копирую вещи.Итак, чтобы повторить еще раз...
почему это не может быть onResume() вызывается после onrestart() и onCreate() методы просто исключая onStart()?
если вы не переопределить
onStart()тогда это действительно то, что происходит. Хотя чемonStart()методActivityбудет вызываться неявно, эффект в коде фактическиonCreate() -> onResume()илиonRestart() -> onResume().
короткий ответ:
мы не можем жить без onStart, потому что это состояние, когда активность становится "видимой" для пользователя, но пользователь не может "взаимодействовать" с ним, но может быть причиной его перекрытия с каким-то другим небольшим диалогом. Эта способность взаимодействовать с пользователем является той, которая отличает onStart и onResume. Думайте об этом как о человеке за стеклянной дверью. Вы можете видеть человека, но вы не можете взаимодействовать (говорить/слушать/пожать руку) с ним. OnResume - это как открыватель двери после чего можно приступать к взаимодействию.
кроме того, onRestart () является наименее понятным. Мы можем задать вопрос, почему бы сразу не перейти к onStart() или onResume() после onStop() вместо onRestart(). Это становится легче понять, если мы заметим, что onRestart() частично эквивалентен onCreate (), если часть создания опущена. В основном оба состояния приводят к onStart () (т. е. активность становится видимой). Таким образом, оба государства должны "подготовить" материал, чтобы быть отображается. OnCreate несет дополнительную ответственность за "создание" материала, который будет отображаться
поэтому их структуры кода могут соответствовать чему-то вроде:
onCreate() { createNecessaryObjects(); prepareObjectsForDisplay(); } onRestart() { prepareObjectsForDisplay(); }вся путаница вызвана тем, что Google выбрал неинтуитивные имена вместо чего-то следующего:
onCreateAndPrepareToDisplay() [instead of onCreate() ] onPrepareToDisplay() [instead of onRestart() ] onVisible() [instead of onStart() ] onBeginInteraction() [instead of onResume() ] onPauseInteraction() [instead of onPause() ] onInvisible() [instead of onStop] onDestroy() [no change]диаграмма активности может быть интерпретирована как:
onStart()вызывается, когда действие становится видимым для пользователя.onResume()вызывается, когда действие начнет взаимодействовать с пользователем. В этом случае вы можете делать разные вещи.посмотреть этой ссылке для справки.
onResume()называется:
- после
onStart()- когда
Activityвыходит на первый план.от http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle:
книга "Привет, Android, представляя платформу мобильной разработки Google" дает хорошее объяснение жизненного цикла android-приложений. К счастью, у них есть конкретная глава онлайн в качестве отрывка. См. рисунок на стр. 39 внутри http://media.pragprog.com/titles/eband3/concepts.pdf
кстати, эта книга очень рекомендуется для начинающих android!
особенно злой пример, когда вы решили показать управляемый диалог из действия с помощью
showDialog(). Если пользователь поворачивает экран, пока диалоговое окно все еще открыто (мы называем это "изменение конфигурации"), то основное действие будет проходить через все вызовы конечного жизненного цикла доonDestroy(), будет воссоздан, и вернуться через жизненные циклы. Что вы не могли бы ожидать, однако, заключается в том, чтоonCreateDialog()иonPrepareDialog()(методы, которые вызываются, когда вы делаетеshowDialog()а теперь еще раз автоматически воссоздать диалог - автоматически, так как это управляемый диалог) называются междуonStart()иonResume(). Суть здесь в том, что диалог не охватывает весь экран и поэтому оставляет часть основной деятельности видимой. Это деталь, но это имеет значение!
onStart()
- вызывается после onCreate (Bundle) или после onRestart (), за которым следует onResume().
- вы можете зарегистрировать BroadcastReceiver в
onStart()следить за изменениями это влияет на ваш пользовательский интерфейс, вы должны отменить его регистрацию в onStop ()- производные классы должны вызывать суперкласс реализация данного способа. Если они этого не сделают, будет сделано исключение быть заброшенный.
onResume()
- вызывается после onRestoreInstanceState (Bundle), onRestart () или onPause ()
- начните анимацию, откройте устройства эксклюзивного доступа (например, камеру)
onStart()обычно отправка работы в фоновый поток, возвращаемые значения которого:
START_STICKY для автоматического перезапуска, если убит, чтобы сохранить он активный.
START_REDELIVER_INTENTдля автоматического перезапуска и повторите попытку, если служба была убита до stopSelf().
onResume()вызывается ОС после того, как устройство переходит в спящий режим или после предупреждения или другой дочерней активности с частичным экраном оставляет часть предыдущего окна видимой, поэтому метод должен повторно инициализировать поля (в структуре try с уловкой исключений). Такая ситуация не вызываетonStop()вызывается, когда ребенок закрывается.
onResume()безonStart()когда активность возобновляется из фонадля получения более подробной информации вы можете посетить Android_activity_lifecycle_gotcha и Жизненный Цикл Активности
onStart()означаетActivityвведено в видимое состояние и макет создан, но не может взаимодействовать с этим макетом активности.
Resume()означает, что теперь вы можете выполнять взаимодействие с макетом активности.
обратите внимание, что есть вещи, которые происходят между вызовами onStart() и onResume(). А именно, onNewIntent(), который я мучительно узнал.
Если вы используете флаг SINGLE_TOP, и вы отправляете некоторые данные в свою деятельность, используя intent extras, вы сможете получить к нему доступ только в onNewIntent (), который называется после методы onStart() и до onResume(). Поэтому обычно вы берете новые (возможно, только измененные) данные из дополнений и устанавливаете их для некоторых членов класса или используйте setIntent (), чтобы установить новое намерение как исходное намерение действия и обработать данные в onResume ().
ссылка на http://developer.android.com/training/basics/activity-lifecycle/starting.html
onResume()вызывается непосредственно перед началом работы с пользователем. В этот момент действие находится в верхней части стека действий, а пользовательский ввод переходит к нему. Всегда следуютonPause().
onPause()вызывается, когда система собирается начать возобновление другой деятельности. Этот метод обычно используется для фиксации несохраненных изменений в постоянные данные, остановить анимацию и другие вещи, которые могут потреблять процессор, и так далее. Он должен делать все, что он делает очень быстро, потому что следующая деятельность не будет возобновлена, пока она не вернется. Далее следует либоonResume()Если активность возвращается на фронт, илиonStop()если оно становится невидимым для пользователя.
надеюсь простое объяснение : -
onStart () -> вызывается, когда активность становится видимой, но может не быть на переднем плане (например, AlertFragment находится сверху или любой другой возможный вариант использования).
onResume() -> вызывается, когда активность находится на переднем плане, или пользователь может взаимодействовать с активностью.


Comments