5

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

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

我发现了这个问题:

Android:Android 设备上的睡眠阶段/级别?

其中“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          
    ....

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

4

1 回答 1

0

设备将唤醒足够长的时间以执行BroadcastReceiver. 我无法找到确切的毫秒数,但想法是在你的接收器中,你应该抓住WakeLock你需要的任何东西来继续你自己的处理。

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

于 2013-03-13T07:31:48.847 回答