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

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

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

Ответ 1

Из просмотра списков рассылки я знаю, что существует сцена под названием "Deep Sleep".

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

Надеюсь, это поможет вам.

Ответ 3

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

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

Ответ 4

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

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

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

В этой странице документа также упоминается

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

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

  • просыпаются
  • тусклый
  • экран выключен
  • CPU off (истинный "сон" или "глубокий сон" )
  • выключение питания

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

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

P.S. Если вы хотите быть исчерпывающим, вы можете считать daydream в своем списке "этапов сна":

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

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