我已经查看了WorkManager的Codelab以及这里的一些示例,但我看到的所有代码都与在设备上本地执行工作或上传到服务器有关,而不是下载数据并响应接收到的数据。甚至在开发者指南中也说,“例如,一个应用程序可能需要不时从网络下载新的资源”,因此我认为它非常适合这项任务。我的问题是,如果WorkManager能够处理以下情况,如果不能,那么处理它的正确工具是什么:
- 计划在后台每天运行一次作业
- 作业是从REST API获取数据(如果可能,将其发布到LiveData对象)。
- 当数据返回时,请检查它是否比本地数据更新。
- 通知用户新数据可用。
我的Worker类大致如下:
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处理此类工作还是其他更合适的东西。