android原生 睡死,Android消息推送关键技术之休眠唤醒

为了节省电量,Android系统在一段时间不操作后,会进入休眠状态,Android6.0之后更是引入了Doze和Standby两种省电模式,达到进一步省电的目的。在这些省电模式下,会挂起一些设备的电源,限制网络访问和一些其它的后台操作,因此休眠自然也会影响到后台的推送服务。

Android休眠机制

由于Android系统是基于Linux内核的,所以Android系统地休眠机制也继承自Linux,并且在此基础上增加了唤醒锁机制。

唤醒锁(WakeLock)

wake_lock 在Android的电源管理系统中扮演一个核心的角色。wake_lock是一种锁的机制,只要持有锁,系统就无法进入休眠,这个锁可以被用户态程序和内核获得。唤醒锁可以是有超时的或者是没有超时的,超时的锁会在超时以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。

Doze和App Standby

从Android 6.0 (API level 23)开始,Android提供了两个节电功能用来增加电池的续航时间。Doze 可以在设备长时间不使用时,通过延迟后台CPU和网络的活动来减少电池的消耗;App Standby将延迟没有交互的app的网络活动。

Doze:

手机在不插电熄屏的状态下,静止不动一段时间(大概1个小时)后,会进入IDLE状态,此机制无视WeakLock,就是说即使持有WeakLock,但在满足上述条件后还是会进入IDLE状态。此状态下将限制应用的网络访问,GPS以及WIFI扫描,推迟包括JobScheduler、Syn、Alarm等操作。在IDLE状态下一段时间后,系统会退出该状态,进入到ID

你可能感兴趣的:(android原生 睡死,Android消息推送关键技术之休眠唤醒)