Какие события могут просыпаться спящим Android-устройством?

Я пишу клиентское приложение Android, которое продолжает получать push-уведомления с сервера, используя HTTP-опрос (Comet).

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

И я нашел этот вопрос:

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

Где «CommonsWare» упомянул, что входящий пакет на не-Wi-Fi-сокете пробудит устройство.

Поэтому мое решение выглядит так:

Client ------------------------- Server ---- Request-----> release WakeLock (Allow device to sleep) <----Notification-- (Hopes it can wake up the device) require WakeLock process the notification ---- Request-----> release WakeLock .... 

Но есть небольшое временное окно между получением уведомления и требованием wakelock, так что мой вопрос в том, как долго устройство будет поддерживать это пробужденное состояние? Возможно ли, чтобы устройство снова заснуло во время этого окна времени?

Устройство будет пробуждено достаточно долго, чтобы выполнить короткий код в BroadcastReceiver . Я не смог найти точное количество миллисов, но идея в том, что в вашем приемнике вы должны захватить все, что нужно WakeLock , чтобы продолжить свою обработку.

Однако точное управление WakeLock может быть сложным. Я рекомендую использовать функцию WakefulIntentService @ WakefulIntentService :