Я не могу понять значение onStart()
переходного состояния. onResume()
Метод всегда вызывается после onStart()
. Почему это не может быть onResume()
вызвано после, onRestart()
а onCreate()
методы просто исключены onStart()
? Какова его цель?
Почему мы не можем жить без onStart()
. Я все еще считаю это излишним (вероятно, потому что не понимаю его значение полностью).
Ответы:
Хорошо, поскольку мой первый ответ был довольно длинным, я не буду его расширять, поэтому давайте попробуем это ...
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: я намеренно пропустил призывы к таким вещам и
super.onCreate(...)
т. Д. Это псевдокод, поэтому дайте мне немного художественной лицензии здесь. ;)Методы для
DriveToWorkActivity
следования ...ОК, так что это еще один длинный (извините, ребята). Но вот мое объяснение ...
onResume()
это когда я начинаю движение, иonPause()
когда я прихожу к временной остановке. Итак, я еду, затем достигаю красного света, поэтому я делаю паузу ... свет становится зеленым, и я возобновляю. Еще один красный свет, и я пауза, затем зеленый, поэтому я возобновляю.onPause() -> onResume() -> onPause() -> onResume()
Петля плотно один и происходит много раз в моем путешествии.Цикл от остановки обратно через перезапуск (подготовка к продолжению моего путешествия) до повторного запуска, возможно, менее распространен. В одном случае я замечаю продуктовый магазин, и
GroceryStoreActivity
он запускается (доводя меняDriveToWorkActivity
до точкиonStop()
). Когда я возвращаюсь из магазина, я прохожуonRestart()
иonStart()
возобновляю свое путешествие.Я мог бы поместить код, который входит в
onStart()
оба,onCreate()
иonRestart()
не беспокоиться о переопределенииonStart()
вообще, но чем больше нужно сделать междуonCreate() -> onResume()
иonRestart() -> onResume()
, тем больше я дублирую вещи.Итак, пересобрать еще раз ...
Если вы не переопределите,
onStart()
то именно это и происходит. ХотяonStart()
методActivity
будет вызываться неявно, эффект в вашем коде будет эффективнымonCreate() -> onResume()
илиonRestart() -> onResume()
.источник
onCreate()
и другоеonRestart()
разделяет много общего кода, верно?Activity
жизненного цикла. Стадия созданияonCreate(...)
может быть очень полезна, когда дело доходит до создания экземпляров элементов экземпляра (элементов пользовательского интерфейса и т. Д.), Но для «перезапуска» этого не требуется. В действительности многим наActivities
самом деле не нужно реализовывать большеonCreate(...)
,onResume()
иonPause()
другие методы доступны для случаев, когда вам может понадобиться сделать что-то другое, и ключом является понимание того, куда поместить код.Activity
методы жизненного цикла - это ОС Android, которая делает это, и делает это очень эффективно (при условии, что разработчик приложения знает, что они делают, а также эффективно кодирует). Если вы будете много заниматься разработкой для Android, вы поймете, почему все работает так, как они работают - это не на 100% идеально, но довольно хорошо.onStart
иonResume
заключается в «видимости» и «взаимодействии с пользователем». Эта метафора вождения автомобиля сбивает с толку и не очень полезна.Короткий ответ:
Мы не можем жить без OnStart, потому что это состояние, когда действие становится «видимым» для пользователя, но пользователь не может «взаимодействовать» с ним, но может быть потому, что оно перекрывается каким-то другим небольшим диалогом. Эта способность взаимодействовать с пользователем является той, которая различает onStart и onResume. Думайте об этом как о человеке за стеклянной дверью. Вы можете видеть человека, но не можете взаимодействовать (разговаривать / слушать / пожать ему руку). OnResume похож на механизм открывания дверей, после которого вы можете начать взаимодействие.
Кроме того onRestart () является наименее понятным. Мы можем задать вопрос, почему бы не перейти непосредственно к onStart () или onResume () после onStop () вместо onRestart (). Это станет легче понять, если мы заметим, что onRestart () частично эквивалентен onCreate (), если часть создания не указана. В основном оба состояния приводят к onStart () (т.е. активность становится видимой). Таким образом, оба государства должны «подготовить» материал для отображения. OnCreate несет дополнительную ответственность за «создание» материала для отображения
Таким образом, их структуры кода могут соответствовать чему-то вроде:
Вся путаница вызвана тем, что Google выбрал неинтуитивные имена вместо чего-то следующего:
Диаграмма действий может быть интерпретирована как:
источник
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()
onStart()
для мониторинга изменений, которые влияют на ваш пользовательский интерфейс. Вы должны отменить его регистрацию в onStop ()onResume()
onStart()
обычно отправляет работу в фоновый поток, чьи возвращаемые значения:START_STICKY для автоматического перезапуска, если его убили, чтобы он оставался активным.
START_REDELIVER_INTENT
для автоматического перезапуска и повторите попытку, если служба была прервана до stopSelf ().onResume()
вызывается операционной системой после того, как устройство переходит в спящий режим или после того, как оповещение или другие дочерние действия с частичным экраном оставляют видимой часть предыдущего окна, поэтому необходим метод для повторной инициализации полей (в структуре try с перехватом исключений) ). Такая ситуация неonStop()
вызывает, когда ребенок закрывается.onResume()
называется безonStart()
когда активность возобновляется из фонаДля получения более подробной информации вы можете посетить Android_activity_lifecycle_gotcha And Activity Lifecycle
источник
Надеюсь, простое объяснение:
onStart () -> вызывается, когда действие становится видимым, но может не находиться на переднем плане (например, AlertFragment находится сверху или любой другой возможный вариант использования).
onResume () -> вызывается, когда действие находится на переднем плане, или пользователь может взаимодействовать с действием.
источник
onStart()
означает, чтоActivity
введено в видимое состояние и макет создан, но не может взаимодействовать с этим макетом активности.Resume()
означает, что теперь вы можете делать взаимодействие с макетом деятельности.источник
Обратите внимание, что между вызовами onStart () и onResume () происходят некоторые вещи. А именно, onNewIntent (), который я мучительно узнал.
Если вы используете флаг SINGLE_TOP и отправляете некоторые данные в свою деятельность, используя дополнительные намерения, вы сможете получить к ним доступ только в onNewIntent (), который вызывается после onStart () и перед onResume (). Поэтому обычно вы берете новые (возможно, только измененные) данные из дополнений и устанавливаете их для некоторых членов класса, или используете setIntent (), чтобы установить новое намерение в качестве исходного намерения действия, и обрабатывать данные в onResume ().
источник
Ссылка на http://developer.android.com/training/basics/activity-lifecycle/starting.html
onResume()
Вызывается непосредственно перед тем, как действие начинает взаимодействовать с пользователем. В этот момент активность находится на вершине стека активности, и пользовательский ввод идет к нему. Всегда следуетonPause()
.onPause()
Вызывается, когда система собирается возобновить другое действие. Этот метод обычно используется для фиксации несохраненных изменений в постоянных данных, остановки анимации и других вещей, которые могут потреблять процессор, и так далее. Он должен делать все, что он делает очень быстро, потому что следующее действие не будет возобновлено, пока оно не вернется. Затем следует,onResume()
если действие возвращается обратно на фронт, илиonStop()
если оно становится невидимым для пользователя.источник
Не уверен, что это считается ответом, но вот видео YouTube с курса Google (Разработка приложений для Android с Kotlin), которое объясняет разницу.
источник