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