如何防止安装Android应用新版本时杀死其正在运行的service?
核心结论
安卓系统默认的应用更新流程必然会终止旧版本应用的全部进程,没有任何API或者配置可以让旧版本的Service在更新过程中不被杀死。你可以通过以下方案实现Service相关业务的无缝衔接,达到和“不杀Service”近似的体验:
可选实现方案
- 用
JobScheduler或者安卓Jetpack的WorkManager提前登记你的后台任务:更新完成后系统会自动重新触发你登记的任务,你可以在任务重启后恢复之前的执行进度。需要提前在业务逻辑里做进度持久化,比如把当前执行到的步骤、相关参数存在SharedPreferences或者本地数据库里。 - 监听
MY_PACKAGE_REPLACED广播:应用更新完成后系统会发送这个广播,你可以在广播接收器里主动重启需要继续运行的Service,恢复之前的业务逻辑。注意这个广播只有你的应用更新完成后才会发给你自己,不会被其他应用的更新触发。 - 如果你的Service是前台服务,可以在Service销毁的
onDestroy回调里把当前的运行状态、进度全部持久化存储,等更新完成重启Service后直接读取存储的状态继续执行,用户侧几乎感知不到中断。
注意事项
不要尝试通过绑定其他应用进程、提权等方式绕过系统的进程销毁逻辑,这类方案不仅适配性极差,在高版本安卓系统里会直接被权限拦截,还会有严重的安全隐患。
内容的提问来源于stack exchange,提问作者Oke Uwechue
相关产品推荐
相关产品推荐

