我问你答-如何保证 Service 不被杀死
2021-01-06 本文已影响0人
jkwen
-
通过控制 onStartCommand(Intent intent) 方法的返回值。
START_STICKY 可控制 Service 被杀掉后再次创建启动,但要注意 intent 可能会为 null。
START_NOT_STICKY 当被杀掉后需要调用 startService 才能再次启动。
START_REDELIVER_INTENT 当被杀掉后会在未来某个时间重启,并带上 intent 值。
-
将 Service 变为一个前台服务,通过提升 Service 所在进程的优先级。
Android 将进程划分为 6 个等级:FOREGROUND, VISIBLE, SECONDARY, HIDDEN, CONTENT, EMPTY,优先级依次降低。
-
在 Service 的 onDestroy() 方法里重启 Service。
-
通过监听系统广播,检查 Service 状态。
这需要用到两个广播监听,一个是系统启动广播,用于启动 Service,确保 Service 能够起来。二是系统时钟广播,用于定时检查 Service 是否还在,如不在就要启动。
-
接入推送,通过第三方推送服务启动 Service。
-
通过双进程守护,保证 Service 所在进程杀死后能重启,从而保证 Service 不被杀死。
查阅了网上大部分文章,感觉都是一个模子出来的,总的几点都罗列在上面了,有些文章中说过无效的就排除了。我没有一一实践验证,个人认为上述几种是可以尝试的,但是还要根据项目做些调整,不可能完全套用。
参考文章: