Этот урок научит вас
Вы также должны прочитать
Попробуйте
ActivityLifecycle.zip
При нормальном использовании приложение, activity на переднем плане иногда перекрывается другими визуальными компонентами, которые приводят к приостановке. Например, когда полупрозрачная vоткрывается (например, в одном из стилей диалога), предыдущая vприостанавливается. Пока деятельность все еще частично видна, но в настоящее время находится не в фокусе, она остается приостановленной.
Однако, как только activity станет полностью не видна, она останавливается (это будет обсуждаться в следующем уроке).
Как только ваша activity переходит в приостановленное состояние, система вызываетonPause()
метод для вашей Activity
, который позволяет остановить продолжающиеся действия, которые не должны продолжаться во время приостановки (такие как видео), или сохранить любую информацию в постоянном хранилище, в случае, если пользователь уйдет из вашего приложения. Если пользователь возвращается к вашей activity , находящейся в состояния приостановки, система возобновит её и вызовет onResume()
метод.
Примечание: Когда ваша activity получает вызов onPause()
, это может быть признаком того, что activity будет приостановлена на мгновение, и пользователь может вернуть фокус вашей activity . Однако, обычно это первый признак того, что пользователь покидает вашу activity .
Приостановка вашей activity
Когда система вызывает onPause()
метод вашей activity , технически это означает, что ваша activity по-прежнему частично видна, но чаще всего это признак того, что пользователь покидает activity , и в скором времени она перейдет в остановленное состояние. Обычно вы должны использовать onPause()
метод обратного вызова, чтобы:
- Остановить анимацию или другие текущие действия, которые могут использовать процессор.
- Сохранить несохраненные изменения, но только если пользователи ожидают, чтобы эти изменения были в постоянном хранилище, когда они покидают вашу activity (например, черновик письма электронной почты).
- Освободить системные ресурсы, такие как широковещательные приемники, дескрипторы датчиков (как GPS), или любые ресурсы, которые могут повлиять на время работы батареи, пока ваша activity приостановлена, и пользователю они не нужны.
Например, если приложение использует Camera
, onPause()
метод является хорошим местом её освободить.
@Override public void onPause() { super.onPause(); // Always call the superclass method first // Release the Camera because we don't need it when paused // and other activities might need to use it. if (mCamera != null) { mCamera.release() mCamera = null; } }
Как правило, вы не должны использовать onPause()
для сохранения пользовательских изменений (например, персональной информации введенной в форме) в постоянное хранилище. Единственный случай, когда вы должны сохранять пользовательские изменения в постоянное хранилище во время вызова onPause()
это когда вы уверены, что пользователи ожидают, что изменения будут автоматически сохранены (например, сохранения черновика при составлении письма). Тем не менее, вы должны избегать выполнения работы, требующей ресурсов процессора, во время вызоваonPause()
, таких как запись в базу данных, так как это может замедлить видимую часть перехода к следующей activity (вместо него вы должны выполнять тяжелые операции выгрузки во времяonStop()
).
Вы должны держать количество операций выполняемых в onPause()
методе относительно небольшим, для того, чтобы позволить выполнить скорейший переход к следующему месту назначения пользователя, если ваша activity фактически остановлена.
Примечание: Когда ваша activity приостановлена, Activity
экземпляр постоянно хранится в оперативной памяти, и будет использован, когда activity возобновится. Вам не нужно повторно инициализировать компоненты, которые были созданы во время любого из методов обратного вызова, ведущих к Resumed состоянию.
[wpanchor id=»2″]
Возобновление вашей activity
Когда пользователь возобновляет вашу activity в Paused состоянии, система вызываетonResume()
метод.
Имейте в виду, что система вызывает этот метод каждый раз, когда ваша activity переходит на передний план, в том числе, когда объект впервые создан. Таким образом, вы должны реализоватьonResume()
для инициализации компонентов, которые вы освободили во время onPause()
и выполнить любые другие инициализации, которые должны происходить каждый раз, когда activity переходит в Resumed состояние (например, начать анимации и инициализировать компоненты, которые используются только в то время пока activity в фокусе пользователя).
Следующий пример onResume()
является дополнением к onPause()
примеру, приведенному выше, поэтому он инициализирует камеру, которая была освобождена, когда activity была приостановлена.
@Override public void onResume() { super.onResume(); // Always call the superclass method first // Get the Camera instance as the activity achieves full user focus if (mCamera == null) { initializeCamera(); // Local method to handle camera init } }