创造杀不死的service是一个比较流氓的行为,用户体验也不会好,通常我们只需要对服务做一定程度的保活。对于保活,比较烦的一点就是同样的措施在不同的手机上效果会完全不同,这和手机厂商的后台管理机制有关。我看了几篇文章,总结了几种常见的保活方式,当然,具体效果因机型而异。比如我的小米,不管用上什么方法,只要在menu中kill应用,服务就会停止。
1.控制onStartCommand的返回值
将此方法直接返回START_STICKY,可以使得服务在被kill后尝试重新创建服务。这个函数可以理解为,服务被异常终止后,要如何进行处理。
@Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub return START_STICKY; //return super.onStartCommand(intent, flags, startId); }2.在onDestroy中重新启动
这个主要针对我们在设置中选择停止服务时,服务正常终止。这时服务会正常调用onDestroy,重启服务即可。(感觉比较流氓)
@Override public void onDestroy() { startService(new Intent(this,MyService.class)); super.onDestroy(); }3.提高服务的优先级
这个主要针对的是系统的内存回收机制,优先级越高,越不容易被回收。服务的优先级高于未显示的活动,但低于前台显示的活动。可以通过setForeground将其设置为前台服务,从而提高优先级。
如果有root权限的话,还可以设置应用属性
android:persistent="true"并将应用放入system/apps,这样应用成为了系统级,也就不容易被杀死了。
4.其他
还可以通过注册静态广播来监听亮屏锁屏等系统广播并唤醒服务做到保活