Я просмотрел кодовую лабораторию для 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, если он может справиться с такой работой, либо с чем-то еще, если это более уместно.