Android: Ступени / уровни сна на устройстве Android?

Есть ли понятие о стадиях / уровнях сна на Android?

Из просмотра списков рассылки я знаю, что существует сцена под названием «Глубокий сон». Выполняется ли выполнение для всех приложений, когда устройство достигает этого состояния? Если это так, кроме того, что пользователь нажимает кнопку питания, что еще может разбудить устройство?

Solutions Collecting From Web of "Android: Ступени / уровни сна на устройстве Android?"

Из просмотра списков рассылки я знаю, что существует сцена под названием «Глубокий сон».

Существует не отдельный этап, называемый «глубокий сон». Существует только «бодрствование», «спать» и «выключено».

Выполняется ли выполнение для всех приложений, когда устройство достигает этого состояния?

Выполнение всех процессов прекращается, когда устройство переходит в спящий режим или отключается.

Если это так, кроме того, что пользователь нажимает кнопку питания, что еще может разбудить устройство?

  • Тревога от AlarmManager
  • Входящий телефонный звонок
  • Входящее текстовое сообщение
  • Если у вас есть сокет, открытый по беспроводным данным (а не WiFi), входящий пакет в этом сокете

Это большие. Могут быть и другие.

Я заметил следующее поведение:

  1. У вас открыта активность и прекратите взаимодействовать с ней
  2. Через несколько секунд (это зависит от настройки устройства) экран погаснет.

    Когда экран выключается, onSaveInstance и onPause .

  3. Через несколько секунд (обычно ~ 15 с) устройство переходит в спящий режим (это правильное имя?)

    Когда это происходит, вызывается следующие методы: onStop (вызов isFinishing возвращает false), onRetainNonConfigurationInstance и onDestroy .

    Все идет нормально. Теперь начинается странное поведение : сразу после завершения последнего onDestroy другое действие: onCreate , onStart , onRestoreInstanceState , onResume и, наконец, onPause .

    Я не нахожу причины этого странного поведения. Почему было создано другое действие, чтобы перейти в режим паузы? Это происходит сразу после onDestroy первоначальной деятельности!

Это было проверено на Galaxy S. Я не тестировал, что происходит через несколько часов без активности. Я не уверен, что что-нибудь еще произойдет.

Я надеюсь, что это поможет вам.

Краткое дополнение к списку commonsware. После поиска способа периодического запуска методов, когда телефон спит, я обнаружил, что функции TimerTask работают во время спящего режима.

TimerTask , по моему опыту, легче работать, если все, что вам нужно, – это запустить методы из службы, а не запускать активность.

Помимо «бодрствования», «спящего» и «выключенного» состояния, упомянутого в @CommonsWare, существует различие между тем, является ли процессор спящим или просто экраном. Например, официальные документы здесь описывают это следующим образом:

Чтобы не разряжать батарею, устройство Android, которое осталось без работы, быстро засыпает . Тем не менее, бывают случаи, когда приложение должно пробуждать экран или процессор и не запускать его, чтобы выполнить некоторую работу. [Выделено курсивом]

В трехэтапной структуре, описанной в CommonsWare, устройство, чей экран темный, вероятно, не классифицируется как «спящий», если CPU не остановлен. Но, как следует из вышеприведенного абзаца, экран-темное состояние можно законно называть «спящим». Несомненно, именно поэтому люди ссылаются на «глубокий сон», чтобы разъяснить, что они говорят о том, что процессор спит.

Эта страница документа также упоминает

Когда устройство Android остается бездействующим, оно сначала тускнеет, затем выключает экран и в конечном счете отключает процессор. Это предотвращает быстрое истощение аккумулятора устройства.

Поэтому, если вы хотите быть всеобъемлющим, вы можете добавить «dim» в список «этапов / уровней сна»:

  1. бодрствующий
  2. тусклый
  3. отключения экрана
  4. CPU выключен (истинный «сон» или «глубокий сон»)
  5. выключение

Очевидно, переход от 2 до 3 к 4 довольно быстро, когда происходит тайм-аут простоя. Но есть и другие моменты, когда экран может быть выключен без перехода в глубокий сон; Например, при воспроизведении звука (по крайней мере в некоторых приложениях).

Хотел бы я рассказать, как предсказать, когда устройство перейдет с экрана на центральный процессор – например, сколько времени занимает время ожидания, – но я не нашел эту информацию. То, что я нашел, это FLAG_KEEP_SCREEN_ON и WAKE_LOCK, чтобы предотвратить тот или иной случай.

PS Если вы хотите быть исчерпывающим, вы можете посчитать мечту в своем списке «этапов сна»:

Daydream – это новый интерактивный экранный режим Android 4.2 для Android-устройств. Он автоматически активируется, когда устройство вставлено в док-станцию ​​или когда устройство остается бездействующим при подключении к зарядному устройству (вместо выключения экрана).

С точки зрения ранее работающего приложения это звучит как daydream ведет себя как переход на другое приложение. Таким образом, на самом деле дело не в спящем устройстве, хотя, как я полагаю, ваша деятельность действительно прекращается.