flyingghost 2014年07月08日
如何得知系统进入深度休眠或者从深度休眠中被唤醒?
我现在使用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,休眠不会导致连接关闭。(也不需要做重建工作)

请问:有没有办法知道当时钟事件发生时到底是不是从休眠中被唤醒?
或者:对于以上需求有没有更好的实现思路?
...全文
123 点赞 收藏 2
写回复
2 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告