我们的后台服务主要是为了实时的为计步和定位信息变化能够不停的获取数据。保证一个跑步的完整性,数据更加全面。
在 跑步-计步器实现(二) 中,也提到了需要做后台服务 灰色保活的方法保证存活率。它是一个用户无感知的服务,在跑步的时候, 能够在APP后台不断处理跑步数据,实时提示用户当前跑步速度,配速等等。
一、启动服务
二、初始化各个跑步相关模块
1、启动传感监听
2、启动定位连续监听
3、启动定时器
4、跑步日志,开启日志写入数据
三、广播
1、锁屏和解锁监听
2、来电监听
四、保活
常用的服务保活有:
1、双进程服务
当主进程RunBackgroundService 服务被杀,onDestroy 则开启守护进程 YZRunningDaemonService 服务,再次启动 RunBackgroundService
2、JobService
将 RunningDaemonJobSchedulerService 设置为系统服务,定时启动,并判断 RunBackgroundService 跑步服务是否还在运行,否则开启服务
3、alarmManager
设置系统闹钟,定时唤醒服务
4、RunningNotification
设置 RunningNotification 通知栏,将 通知栏与RunBackgroundService 服务绑定,同时设置为前台服务,提高优先级。
5、windowManager
通过 windowManager add view ,添加一个空的view ,达到应用悬浮在其他应用上层的效果,当然最后还是让应用获得悬浮窗权限。
6.我目前使用的方案
以上方案经测试,多少都会有被杀的问题,息屏后不能保证服务一直在。所以,只要不是用户手动杀的,能继续在后台存活是目前应该主要解决的方案。当然,如果用户能手动添加了白名单再另说了。
我目前的方案息屏,自测,3-4个小时内息屏不会有被杀的问题,即使在手机电量过低的时候也不会。