闹钟AlarmManager和广播BroadCastReceiver实现后台服务功能性保活
由于Alarm不受应用生命周期的影响,可以通过设置系统闹钟的方法,间隔一定时间唤醒设备重新启动服务的方式来实现功能性保活;当然Alarm仍然会受到电池性能优化的影响,在设备处于休眠期时受到限制;当结束休眠期时会自动唤醒服务。对于不需要再休眠期执行操作的程序来讲这已经变相实现了保活。
功能实现步骤:
- 定义服务
- 静态广播注册
- 服务中定义AlarmManager
- 广播接收器启动服务
- 定义服务:首次启动服务
- 注册静态广播接收器:清单文件中注册接收器
- 定义AlarmManager:在服务Service中定义一次性Alarm,设置间隔时间,绑定广播broadcast用于启动闹钟时发送广播。(这里曾用repeat重复性闹钟直接实现循环启动服务,实际测试中重复性闹钟这里系统有限制,遂采取一次性闹钟和广播实现循环功能)
- 广播接收器接收广播再次启动服务,服务中重新设置一次性闹钟实现循环性保活。
踩坑注意点:闹钟类型type、PendingIntent的flag属性选择