如何得知系统进入深度休眠或者从深度休眠中被唤醒?

flyingghost 2014-07-08 03:26:51
我现在使用Service维护一个socket,和服务器保持长连接。
如果系统进入suspend状态,CPU会被休眠,WiFi模块会被关闭(当然长连接也就GG了)。
所以我使用AlarmManager每隔1小时做一次唤醒(当然如果系统本来就醒着,这个硬件时钟事件也会发生)。

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, WAKEUP_INTERVAL, pendingIntent);

然后在接收到唤醒Intent之后,获取WakeLock并保持10分钟(当然如果系统本来就醒着,多一个锁也不会怎么样)

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKEUP_ACTION);
wakeLock.acquire(KEEP_AWAKE_TIME);


问题在于:我无法区分
1,当前闹钟事件发生时本来就是醒着的状态(这时候长连接一切正常,不需要做任何事)
2,或者是真的被系统从深度休眠状态唤醒。
2a,如果是建立在WiFi上的socket,休眠状态WiFi模块被关闭,长连接也就不复存在,这时候就需要做一系列的重建工作。
2b,如果是建立在GPRS等之上的socket,休眠不会导致连接关闭。(也不需要做重建工作)

请问:有没有办法知道当时钟事件发生时到底是不是从休眠中被唤醒?
或者:对于以上需求有没有更好的实现思路?
...全文
789 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingghost 2014-07-09
  • 打赏
  • 举报
回复
引用 1 楼 heaimnmn 的回复:
暂无解决方法,小米的手机每隔5分钟就会将所有进程KILL
android 的休眠真是坑啊,各种room各种不同表现。。。
哎,真难 2014-07-08
  • 打赏
  • 举报
回复
暂无解决方法,小米的手机每隔5分钟就会将所有进程KILL

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧