首页 > 解决方案 > 从 JobScheduler 迁移到 WorkManager 似乎是一项艰巨的任务。任何建议+

问题描述

我已经用JobScheduler了一段时间了。一个典型的例子是:

JobScheduler触发onStartJob()方法。这会启动某种任务,其中可能包括其他几个后台进程(获取设备位置、进行网络调用等)。JobService然后,我使用一个接口在任务完成或失败时回调。

但是,WorkManager似乎基本上没有办法异步运行工作。我知道WorkManager会在一个单独的线程中运行 Workers,但似乎单个工作人员必须同步运行?如果是这样,我将不得不重新设计我的应用程序中的许多逻辑,除非我遗漏了什么。

假设我有一个天气应用程序,它将使用JobScheduler来运行一个JobService执行以下操作的应用程序:

onStartJob()--> 获取设备位置 --> 对本地天气数据进行 API 请求 -> 写入数据库 -> 调用 jobFinished()

WorkManager, 是这样的预期实现将多个工人链接在一起吗?如果是这样,你如何将数据从一个 Worker 传递给另一个?WorkManager同样,对于任何稍微复杂的应用程序来说,迁移到API似乎都是一项艰巨的任务。

标签: androidandroid-jobschedulerandroid-workmanager

解决方案


我认为您正在寻找的是一个ListenableWorker. 它正是那个界面。当jobFinished()您解决ListenableFuture.

https://developer.android.com/reference/androidx/work/ListenableWorker.html#startWork()类似于onStartJob您的情况。


推荐阅读