Tue*_* AM 25 android android-service android-jetpack android-workmanager
我想安排每晚数据库更新.所以我使用新的Android WorkManager.我的理解是,一旦安排它将始终独立于应用程序的生命周期在后台运行.是对的吗?我的第一次测试显示Work只在应用程序运行时执行.
val locationWork = PeriodicWorkRequest.Builder(UpdateDatabaseWorker::class.java, 24, TimeUnit.HOURS)
.addTag("DATABASE_UPDATE_SERVICE")
.build()
WorkManager.getInstance().enqueue(locationWork)
Run Code Online (Sandbox Code Playgroud)
mik*_*enz 52
根据WorkManager bugtracker上报告的各种问题,他们的文档并不完全准确地说明了在这种边缘情况下WorkManager的确切行为.
在某些设备上,当应用程序从任务管理器中清除时,应用程序会被强制停止,因此该部分是预期的....... 来源
不幸的是,一些设备实现了从最近的菜单中杀死应用程序作为强制停止.股票Android不会这样做.当一个应用程序被强制停止时,它无法执行作业,接收警报或广播等.所以不幸的是,我们解决它是不可行的 - 问题在于操作系统并且没有解决方法.资源
我们遇到的唯一问题是,一些中国原始设备制造商将刷卡作为强制停止处理从最近解雇.当发生这种情况时,WorkManager将在下次启动应用程序时重新安排所有待处理的作业.鉴于这是一个CDD违规,WorkManager可以做的更多,因为它是一个客户端库.资源
除此之外,如果设备制造商决定修改Android库存以强制停止应用程序,WorkManager将停止工作(JobScheduler,警报,广播接收器等).没有办法解决这个问题.不幸的是,有些设备制造商会这样做,因此在这些情况下,WorkManager将在下次启动应用程序之前停止工作.资源
通过OneTimeWorkRequest
对具有库存android的Pixel 2 XL进行强烈测试(无约束),行为如下:
我的理解是,一旦安排好,它将始终独立于应用程序的生命周期在后台运行。那正确吗?
是。根据文档
即使您的应用被强制退出或设备重新启动,该任务仍然可以保证运行。
WorkManager根据设备API级别和应用程序状态等因素选择适当的方式来运行任务。如果WorkManager在应用程序运行时执行您的任务之一,则WorkManager可以在应用程序进程中的新线程中运行任务。如果您的应用未运行,WorkManager将根据设备API级别选择适当的方式来调度后台任务。
根据API级别,WorkManager可能使用JobScheduler,Firebase JobDispatcher或AlarmManager。在执行工作之前,它将尊重打ze睡并考虑所有其他限制。由于打expect模式可能会等待维护窗口,因此可能会有所延迟。
注意:
WorkManager适用于需要保证即使应用程序退出时系统也将运行它们的任务,例如将应用程序数据上传到服务器。它不适用于进行中的后台工作,如果应用程序进程消失,该后台工作可以安全地终止;对于这种情况,我们建议使用ThreadPools。
归档时间: |
|
查看次数: |
15129 次 |
最近记录: |