Android系统.应用程序关闭时WorkManager是否正在运行?

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进行强烈测试(无约束),行为如下:

  • 任务经理关闭:
    • 工作继续(稍后)
  • 重启设备(正常运行):
    • 重启完成后继续工作
  • 应用信息"强制停止":
    • 工作停止,只有在再次启动应用程序时才会继续
  • 重启设备(工作是"强制停止"):
    • 在应用再次启动之前,工作不会继续

  • @mikepenz,清除最近的任务如何被视为_坏_操作?每个用户都会定期执行此操作,这是否意味着不应执行所有计划的作业?那么什么情况下作业会被执行呢?仅当用户至少启动一次应用程序并且从未清除过最近的任务列表时?对我来说毫无意义。 (3认同)

Sag*_*gar 6

我的理解是,一旦安排好,它将始终独立于应用程序的生命周期在后台运行。那正确吗?

是。根据文档

即使您的应用被强制退出或设备重新启动,该任务仍然可以保证运行。

WorkManager根据设备API级别和应用程序状态等因素选择适当的方式来运行任务。如果WorkManager在应用程序运行时执行您的任务之一,则WorkManager可以在应用程序进程中的新线程中运行任务。如果您的应用未运行,WorkManager将根据设备API级别选择适当的方式来调度后台任务。

根据API级别,WorkManager可能使用JobScheduler,Firebase JobDispatcher或AlarmManager。在执行工作之前,它将尊重打ze睡并考虑所有其他限制。由于打expect模式可能会等待维护窗口,因此可能会有所延迟。

注意:

WorkManager适用于需要保证即使应用程序退出时系统也将运行它们的任务,例如将应用程序数据上传到服务器。它不适用于进行中的后台工作,如果应用程序进程消失,该后台工作可以安全地终止;对于这种情况,我们建议使用ThreadPools。

  • 那么只将任务入队一次就足够了,并且它将永远运行直到明确取消?我观察到的是它只运行一次并且在应用程序运行时运行。 (2认同)
  • 我尝试将OneTimeWorkRequest放入我的工作程序中,然后放入一个简单的日志,并使其处于线程睡眠状态,但工作正常,但是一旦我通过滑动退出应用程序,就没有更多的日志了..对我而言,它似乎停止了。 (2认同)
  • 在我的 Android 9 设备中,当我关闭应用程序时,工作管理器不起作用。但我真的需要我的服务始终有效。 (2认同)