Я рекомендую придерживаться Worker
, это более простая параллель с WorkManager
, но без обязательных ограничений. Worker
и WorkManager
автоматически обрабатывают более низкие версии SDK, переходя к AlarmManager.
Я заменил AlarmManager
моего приложения на Worker
, оно намного стабильнее для периодических задач.
Все, что вам нужно, это класс Worker MyPeriodicWorker.class
:
public class MyPeriodicWork extends Worker {
private static final String TAB = MyPeriodicWork.class.getSimpleName();
public MyPeriodicWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.e(TAB,"PeriodicWork in BackGround");
// Run your task here
return Result.success();
}
}
и экземпляр WorkRequest
, вызываемый из другого класса. В вашем случае вы хотите PeriodicWorkRequest
для повторяющейся задачи. Вы должны указать параметр для flex, если вы хотите, чтобы задача выполнялась в указанное время (минимальное изгибание <5 минут раньше): </p>
PeriodicWorkRequest mPeriodicWorkRequest = new PeriodicWorkRequest.Builder(MyPeriodicWorker.class,
periodMS, TimeUnit.MILLISECONDS, periodFlex, TimeUnit.MINUTES)
.addTag("PeriodicWorkRequest")
.build();
. Все, что вам нужно, это использовать, затем используйте WorkManager
enqueue
для начала.
WorkManager.getInstance(context).enqueue(mPeriodicWorkRequest);