Какова альтернатива AlarmManager для планирования длительных задач в Oreo? - PullRequest
0 голосов
/ 25 октября 2019

Я создаю приложение, которое автоматически переводит устройство Android в бесшумный режим каждый день в 8:00? Я использовал AlarmManager, Job-Scheduler с сервисом переднего плана, но он не будет работать на Android 8 или выше. Я также использую WorkManager, но WorkManager требует определенных ограничений для запуска задания. PlZzz Помогите мне

1 Ответ

0 голосов
/ 27 октября 2019

Я рекомендую придерживаться 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);
...