Android应用更新时PeriodicWorkRequest是否会停止运行?
结论先行
Android应用通过Play Store自动更新时,已经调度完成的PeriodicWorkRequest不会被系统自动取消,你要实现的每6小时清理一次临时文件的周期任务,不会因为常规应用更新被直接终止。
行为逻辑说明
- WorkManager会把所有周期任务的配置、调度状态持久化存储在应用私有目录下的内置数据库中,Play Store自动更新属于同签名应用的覆盖安装流程,不会清除应用私有目录内的持久化数据。更新完成后WorkManager初始化时会自动读取已存储的任务信息,按照原有配置继续执行调度逻辑。
- 只有两类场景会导致已有的周期任务失效:
- 用户手动卸载应用,或者在系统设置中对该应用执行了「清除全部数据」操作,此时应用私有目录下的所有数据(包括WorkManager存储的任务信息)会被完全抹除
- 新版本代码中主动调用了
cancelUniqueWork()、cancelAllWork()等取消任务的接口,或者在调度同名唯一任务时使用了ExistingPeriodicWorkPolicy.REPLACE策略,主动替换/删除了原有周期任务
开发注意事项
针对你提到的6小时清理临时文件的场景,要避免应用更新后重复创建任务:不要每次应用启动就无脑入队新的周期任务,必须给任务设置全局唯一的工作标识,配合
ExistingPeriodicWorkPolicy.KEEP策略做调度,已存在同名任务时直接保留原有配置即可。
正确的调度代码示例:
// 构建间隔6小时的临时文件清理周期任务 val tempCleanWork = PeriodicWorkRequestBuilder<TempCleanWorker>( 6, TimeUnit.HOURS ).build() // 以KEEP策略入队唯一任务,避免重复创建、覆盖原有任务 WorkManager.getInstance(context).enqueueUniquePeriodicWork( "temp_file_clean_job", ExistingPeriodicWorkPolicy.KEEP, tempCleanWork )
内容的提问来源于stack exchange,提问作者Patroclus
相关产品推荐
相关产品推荐

