Android: этапы / уровни сна на устройстве Android? - PullRequest
11 голосов
/ 15 февраля 2011

Есть ли понятие «стадии сна» на Android?

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

Ответы [ 4 ]

20 голосов
/ 15 февраля 2011

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

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

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

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

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

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

Это большие.Там могут быть другие.

4 голосов
/ 15 февраля 2011

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

  1. Вы открываете свою деятельность и прекращаете с ней взаимодействовать
  2. Через несколько секунд (в зависимости от конфигурации устройства) экран погаснет.

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

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

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

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

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

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

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

1 голос
/ 05 мая 2011

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

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

0 голосов
/ 27 августа 2015

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

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

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

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

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

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

  1. пробуждение
  2. затемнение
  3. выключение экрана
  4. Выключение процессора (истинный "сон" или "глубокий сон")
  5. выключение

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

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

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

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

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

...