Я пишу клиентское приложение 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
: