android - 哪些事件可以唤醒 sleep 中的 Android 设备?

标签 android sockets wakelock android-wake-lock

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

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

我发现了这个问题:

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

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

最佳答案

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

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

关于android - 哪些事件可以唤醒 sleep 中的 Android 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616561/

相关文章:

android - 当其他应用程序获取唤醒锁时收到通知

android - Firebase Cloud Messaging 真的需要 WAKE LOCK 权限吗?

java - 在 android studio 中编译应用程序时运行时错误

安卓自定义EditText

linux - 套接字监听器(在 Linux 上)

c++ - Socket发送数据但收不到响应

android - 为 AlarmManager 警报创建 Wi-Fi 唤醒锁

android - 在 Android 中解析 Google Places JSON 数据?

java - 如何在没有命令行工具的情况下配置 AWS Amplify?

java - 在java中的客户端服务器套接字中将字符串转换为int