我已经查看了 WorkManager 的代码实验室以及此处的一些示例,但是我所看到的代码中的所有内容都与在设备上本地工作或上传到服务器的工作有关,而不是下载数据并响应收到的数据. 在开发人员指南中甚至说,“例如,一个应用程序可能需要不时从网络下载新资源”,所以我认为它非常适合这项任务。我的问题是 WorkManager 是否可以处理以下情况,如果不能,处理它的正确工具是什么:
- 安排每天在后台运行一次的作业
- 工作是从 REST API 获取数据(如果可能,将其发布到 LiveData 对象)。
- 当数据返回时,检查它是否比本地数据更新。
- 通知用户有新数据可用。
我的工人阶级看起来像这样:
public class MyWorker extends Worker {
@NonNull
@Override
public WorkerResult doWork() {
lookForNewData();
return WorkerResult.SUCCESS;
}
public void lookForNewData() {
MutableLiveData<MyObject> liveData = new MutableLiveData<>();
liveData.observe(lifeCycleOwner, results -> {
notifyOnNewData(results);
})
APILayer.getInstance().fetchData(searchParams, liveData)
}
我的问题当然是 LiveData 对象无法观察,因为没有可以作为其 LifecycleOwner 的活动或片段。但即使我使用来自 API 的回调来响应到达的数据,我的工作人员也会发布它是成功的并且它可能不会继续回调,对吗?所以我有点知道这种方法是完全错误的,但是我看不到任何使用 WorkManager 获取数据的代码
请提供适当的解决方案和一些示例代码或一些链接,如果它可以处理此类工作,请使用 WorkManager 或其他更合适的东西。