Приостановка и возобновление явлений

В данном уроке мы рассмотрим

Также рекомендуем прочитать

Во время использования приложения, явление может перекрываться другими визуальными компонентами, из-за чего происходит его приостановка. К примеру, при открытии диалога явление приостанавливается. Явление может оставаться частично видимым, однако будет оставаться приостановленным до тех пор, пока не получит фокус.

Если же явление скрыто полностью и невидимо, оно переходит в состояние остановлено.

Когда явление переходит в приостановленное состояние, система вызывает метод onPause(), который позволяет вам остановить действия, которые не должны выполняться в этом состоянии (например воспроизведение видео) или сохранить информацию о текущем состоянии явления, чтобы при возобновлении пользователь мог продолжить работу с того же места. Когда явление вновь становится активным, система вызывает метод onResume().

Примечание:Вызов метода onPause() может означать, что явление приостановлено на мгновение и пользователь сейчас вернет ему фокус. Однако это может также служить первым сигналом закрытия явления.

схема жизненногол цикла приостановки явления

Рисунок 1.Если полупрозрачное явление перекроет ваше, система вызовет onPause() и ваше явление будет приостановлено (1). При возвращении фокуса, система вызовет onResume() и явление станет возобновленным (2).

Приостановка вашего явления

Технически вызов onPause() может означать, что явление все еще частично видимо, но чаще всего это указывает на то, что пользователь закрыл явление и скоро оно перейдет в состояние Остановлено. Поэтому обычно onPause() используется в следующих случаях:

  • Остановка анимации или действий, активно использующих процессор.
  • Сохранение данных, которые пользователь ожидает увидеть при повторном открытии явления (например незаконченное письмо).
  • Освобождение системных ресурсов, таких как получатели широковещательных сообщений, дескрипторы датчиков (например GPS) и других ресурсов, которые могут расходовать заряд батареи и в которых приостановленное явление не нуждается.

Пример применения onPause() в приложении, использующем камеру:

Если говорить в целом, вы не должны использовать метод onPause() для помещения данных в постоянное хранилище. Делайте это только в том случае, когда уверены, что пользователи ждут от явления автоматического сохранения данных (например черновиков писем). Однако избегайте выполнение в onPause() сложных операций, таких как запись в базу данных, поскольку это может замедлить открытие следующего явления(выполняйте затратные операции внутри onStop()).

Примечание:Экземпляр класса Activity продолжает храниться в память во время приостановки. Вам не нужно заново создавать и инициализировать используемые компоненты.

Возобновление вашего явления

При возобновлении явления система вызывает метод onResume().

Важно помнить, что этот метод система вызывает каждый раз при возвращении фокуса явлению, в том числе при первом запуске приложения. Поэтому в методе onResume() вы должны инициализировать те компоненты, которые освободили в методе onPause(), и которые могли измениться за время пока явление не было возобновлено.

Следующий пример применения onResume() сочетается с примером onPause(), который мы рассмотрели выше. Здесь мы заново инициализируем камеру, которая была освобождена во время паузы явления:

Добавить комментарий