android: когда использовать onStart(), onStop()?
Я прочитал несколько сообщений, которые описывают разницу между onStart()
и onResume()
: onStart()
вызывается, когда активность становится видимой, onResume()
вызывается, когда действие готово для взаимодействия с пользователем. штраф.
Я всегда просто добавил код onPause()
и onResume()
, и никогда не заморачивался с onStart()
и onStop()
.
может ли кто-нибудь привести конкретные примеры того, что вы можете сделать в onStart()
, и onResume()
? То же самое касается onStop()
и onPause()
, как onStop()
полезное? Должно быть, я упускаю что-то важное.
3 ответов
onStop()
будет (например) вызываться, когда вы покидаете действие для какого-либо другого действия (edit: almost. см. commonswares комментарий о диалоговых тематических мероприятиях).
Например, если вы используете startActivity()
в действии A, чтобы начать действие B. При нажатии назад в действии B вы вернетесь к действию A и onStart
будет называться.
это отличается от некоторых причин onPause
может быть вызван без onStop
называют. Если, например, время ожидания экрана или вы нажмете кнопка Режим ожидания onPause
будет называться, но, вероятно, не onStop
(в зависимости от доступной памяти и еще много чего), поэтому это "более легкая пауза". onStop, вероятно, будет вызван в конечном итоге даже в этом случае, но не сразу.
хорошо, но что толку
часто нет конкретного использования, но может быть. Поскольку ваши действия будут сохранять состояние памяти в стеке даже после того, как вы начнете какое-либо другое действие, этот стек будет увеличиваться с количеством начаты действия (высота стека). Это может привести к большие памяти в некоторых приложениях. Через некоторое время структура будет пинать и убивать некоторые действия в стеке, но это довольно тупо и, вероятно, будет означать, что многие государства будут сохранены при возвращении.
вот пример использования onStart/onStop
если вы хотите освободить некоторое состояние при выходе из действия для другого и воссоздать его, когда вы вернетесь.
Я использовал его для установки listadapters в null, пустые кэши изображений и похожие (в очень специфических приложениях). Если вы хотите освободить память, используемую видимыми представлениями в listadapter, вы можете воссоздать ее в onstart и позволить представлениям быть подобраны gc. Это увеличит вероятность того, что остальная часть состояния памяти активности будет жить.
некоторые ресурсы можно считать достаточно хорошими, чтобы сохранить, пока экземпляр activity жив, а некоторые только тогда, когда он находится в передней части стека. Это до вас, чтобы решить, что лучше в вашем приложении и гранулярность create/start / resume дает вам это.
onStart() работает после того, как onCreate () завершил свою задачу. Это хорошее место для размещения broadcastReceiver или инициализации некоторого состояния пользовательского интерфейса, которое должно отображаться последовательно в любое время, когда пользователь возвращается к этому действию.
onResume () работает, когда вы возвращаетесь к своему намерению или деятельности, нажав кнопку Назад. Таким образом, onPause будет вызываться каждый раз, когда на первый план выходит другая деятельность.
Я думаю, что ваш вопрос довольно объяснен здесь, на doc: прочитайте о Жизненный Цикл Деятельности