从 JobScheduler 迁移到 WorkManager 似乎是一项艰巨的任务。任何建议+
Migrating from JobScheduler to WorkManager seems like a massive undertaking. Any advice+
我已经使用 JobScheduler
一段时间了。一个典型的例子是:
JobScheduler
触发 onStartJob()
方法。这将启动某种任务,可能包括其他几个后台进程(获取设备位置、进行网络调用等)。然后,我使用一个接口在任务完成或失败后回调 JobService
。
然而,WorkManager
似乎基本上没有办法 运行 异步工作。我知道 WorkManager
将 运行 Workers 在一个单独的线程中,但似乎单个 worker 必须同步 运行?如果是这样,我将不得不在我的应用程序中重做很多逻辑,除非我遗漏了什么。
假设我有一个天气应用程序,它会使用 JobScheduler
到 运行 一个 JobService
来执行以下操作:
onStartJob()
--> 获取设备位置 --> API 请求本地天气数据 -> 写入数据库 -> 调用 jobFinished()
使用 WorkManager
时,是否打算将多个 worker 链接在一起?如果是这样,您如何将数据从一个 Worker 传递给另一个?同样,对于任何稍微复杂的应用程序来说,迁移到 WorkManager
API.
似乎都是一项艰巨的任务
我想你要找的是 ListenableWorker
。它具有完全相同的界面。您不必在最后调用 jobFinished()
,我们会在您解析 ListenableFuture
时为您完成工作。
https://developer.android.com/reference/androidx/work/ListenableWorker.html#startWork() 类似于您的 onStartJob
。
我已经使用 JobScheduler
一段时间了。一个典型的例子是:
JobScheduler
触发 onStartJob()
方法。这将启动某种任务,可能包括其他几个后台进程(获取设备位置、进行网络调用等)。然后,我使用一个接口在任务完成或失败后回调 JobService
。
然而,WorkManager
似乎基本上没有办法 运行 异步工作。我知道 WorkManager
将 运行 Workers 在一个单独的线程中,但似乎单个 worker 必须同步 运行?如果是这样,我将不得不在我的应用程序中重做很多逻辑,除非我遗漏了什么。
假设我有一个天气应用程序,它会使用 JobScheduler
到 运行 一个 JobService
来执行以下操作:
onStartJob()
--> 获取设备位置 --> API 请求本地天气数据 -> 写入数据库 -> 调用 jobFinished()
使用 WorkManager
时,是否打算将多个 worker 链接在一起?如果是这样,您如何将数据从一个 Worker 传递给另一个?同样,对于任何稍微复杂的应用程序来说,迁移到 WorkManager
API.
我想你要找的是 ListenableWorker
。它具有完全相同的界面。您不必在最后调用 jobFinished()
,我们会在您解析 ListenableFuture
时为您完成工作。
https://developer.android.com/reference/androidx/work/ListenableWorker.html#startWork() 类似于您的 onStartJob
。