我问你答-如何保证 Service 不被杀死

  • 通过控制 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 不被杀死。

查阅了网上大部分文章,感觉都是一个模子出来的,总的几点都罗列在上面了,有些文章中说过无效的就排除了。我没有一一实践验证,个人认为上述几种是可以尝试的,但是还要根据项目做些调整,不可能完全套用。

参考文章:

Android开发之如何保证Service不被杀掉(broadcast+system/app)

如何保证Service不被杀死

Android实现双进程守护

你可能感兴趣的:(我问你答-如何保证 Service 不被杀死)