为了节省电量,Android系统在一段时间不操作后,会进入休眠状态,Android 6.0之后更是引入了Doze和Standby两种省电模式,达到进一步省电的目的。在这些省电模式下,会挂起一些设备的电源,限制网络访问和一些其它的后台操作,因此休眠自然也会影响到后台的推送服务。
唤醒方法:
1、在执行发送心跳包、重连、拉取推送内容等操作时使用PARTIAL_WAKE_LOCK,防止在执行重要操作时CPU休眠,并在使用完成后释放,以便休眠;
2、心跳定时器使用AlarmManager,在设置闹钟时使用带WAKEUP后缀的type,在6.0以后使用setExactAndAllowWhileIdle或setAndAllowWhileIdle方法设置闹钟,以便能在Doze模式下唤醒;
3、在Doze模式下,alarm闹钟会被推迟,网络会被限制,可以通过申请加入电池优化白名单的方法修复;申请方法为在mainifest中增加REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限,在代码中使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS的Intent来弹出申请对话框。
4、部分手机即便使用了上述方法也会存在网络断开、线程睡死等现象,只能自行适配,看看是否有独特的后台管理机制与省电策略。
关于消息推送服务,想要了解更多也可以咨询极光。
极光推送官方链接:https://www.jiguang.cn/push
0条评论