哪些事件可以唤醒处于睡眠状态的 Android 设备?

Posted

技术标签:

【中文标题】哪些事件可以唤醒处于睡眠状态的 Android 设备?【英文标题】:What events can wake up a sleeping Android device? 【发布时间】:2011-08-02 18:14:29 【问题描述】:

我正在编写一个 android 客户端应用程序,它使用 HTTP 长轮询(彗星)不断接收来自服务器的推送通知。

我不想一直保留 WakeLock,因为它会耗尽电池电量,但我需要确保设备即使在睡眠模式下也能收到通知。

我发现了这个问题:

Android: Sleep stages/levels on an Android device?

“CommonsWare”提到非 Wifi 套接字上的传入数据包将唤醒设备。

所以我的解决方案如下所示:

    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          
    ....

但是在收到通知和要求唤醒锁之间有一点时间窗口,所以我的问题是,设备将保持这种唤醒状态多久?设备是否可以在此时间窗口内重新进入睡眠状态?

【问题讨论】:

【参考方案1】:

设备将唤醒足够长的时间以执行BroadcastReceiver 中的一些短代码。我无法找到确切的毫秒数,但我们的想法是,在您的接收器中,您应该获取您需要继续自己处理的任何 WakeLock

但是,WakeLock 的精确管理可能很棘手。我推荐使用@CommonsWare 的WakefulIntentService

https://github.com/commonsguy/cwac-wakeful

【讨论】:

以上是关于哪些事件可以唤醒处于睡眠状态的 Android 设备?的主要内容,如果未能解决你的问题,请参考以下文章

让 Android 进入睡眠状态以进行测试

在 android 应用程序中访问唤醒锁统计信息

唤醒一个处于睡眠状态的 QThread?

如果设备已被唤醒或进入睡眠状态,如何检查应用程序

linux 内核睡眠与唤醒

如何将 Mac 置入睡眠状态或唤醒 Mac?