android - 从 JobScheduler 迁移到 WorkManager 似乎是一项艰巨的任务。任何建议+
问题描述
我已经用JobScheduler
了一段时间了。一个典型的例子是:
JobScheduler
触发onStartJob()
方法。这会启动某种任务,其中可能包括其他几个后台进程(获取设备位置、进行网络调用等)。JobService
然后,我使用一个接口在任务完成或失败时回调。
但是,WorkManager
似乎基本上没有办法异步运行工作。我知道WorkManager
会在一个单独的线程中运行 Workers,但似乎单个工作人员必须同步运行?如果是这样,我将不得不重新设计我的应用程序中的许多逻辑,除非我遗漏了什么。
假设我有一个天气应用程序,它将使用JobScheduler
来运行一个JobService
执行以下操作的应用程序:
onStartJob()
--> 获取设备位置 --> 对本地天气数据进行 API 请求 -> 写入数据库 -> 调用 jobFinished()
与WorkManager
, 是这样的预期实现将多个工人链接在一起吗?如果是这样,你如何将数据从一个 Worker 传递给另一个?WorkManager
同样,对于任何稍微复杂的应用程序来说,迁移到API似乎都是一项艰巨的任务。
解决方案
我认为您正在寻找的是一个ListenableWorker
. 它正是那个界面。当jobFinished()
您解决ListenableFuture
.
https://developer.android.com/reference/androidx/work/ListenableWorker.html#startWork()类似于onStartJob
您的情况。
推荐阅读
- mongodb - 按计数排序并获取父节点属性
- c - OpenACC 循环未矢量化/并行化:包含调用
- java - 创建一个等待所有 Schedulers.io() 完成的 Mockito 测试用例
- java - 以编程方式正确打开“设置”中的“关于设备”页面?
- sql - 如何计算内连接函数的结果
- python - 在 Django 中编辑验证错误
- angular - Angular 9:在构造函数运行之前检查组件模板
- c++ - std::sort() C++ 的自定义比较函数
- ruby-on-rails - ruby-on-rails 中的 Mongoid
- python - 熊猫“替换”方法无法替换点(。)字符