Я просмотрел документацию, там не упоминалось, что WorkManager
будет обрабатывать сохраняемые данные WorkRequests
, хотя, как вы сказали, JobInfo
уже имеет этот флаг.
Однако в источнике есть метод с именем rescheduleEligibleWork()
, который перепланирует все задания при загрузке или аналогичных случаях.Он сохраняет рабочие запросы в своей собственной базе данных.
/**
* Reschedules all the eligible work. Useful for cases like, app was force stopped or
* BOOT_COMPLETED, TIMEZONE_CHANGED and TIME_SET for AlarmManager.
*
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public void rescheduleEligibleWork() {
// Reset scheduled state.
getWorkDatabase().workSpecDao().resetScheduledState();
// Delegate to the WorkManager's schedulers.
// Using getters here so we can use from a mocked instance
// of WorkManagerImpl.
Schedulers.schedule(getWorkDatabase(), getSchedulers());
}
В документации не указано, как настроить его на такие случаи.Поскольку конструктор WorkManagerImpl
использует Context
, это (вероятно) означает, что если ваше приложение имеет разрешение на RECEIVE_BOOT_COMPLETED
, WorkManager
получит это событие и перепланирует все рабочие запросы, которые не были выполнены в указанном вами окне, которое вы указалив Work.Builder
.