AlarmManager在Oreo中安排长时间任务的替代方案是什么?

问题描述 投票:0回答:1

我正在创建一个应用程序,它将每天早上8:00自动将Android设备设置为静音模式?我使用了带有前景服务的AlarmManager,Job-Scheduler,但在Android 8或更高版本上无法使用..我也使用WorkManager,但WorkManager需要某些约束才能运行该作业。.plZzz帮助我

java android alarmmanager android-workmanager foreground-service
1个回答
0
投票

我建议坚持使用Worker,它与WorkManager相似,但没有强制性约束。 WorkerWorkManager通过降低到AlarmManager来自动处理较低版本的SDK。

我已将应用程序的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来执行重复任务。如果要让任务在指定的时间运行(最少提前5分钟的flex),则必须为flex指定参数:

    PeriodicWorkRequest mPeriodicWorkRequest = new PeriodicWorkRequest.Builder(MyPeriodicWorker.class,
            periodMS, TimeUnit.MILLISECONDS, periodFlex, TimeUnit.MINUTES)
            .addTag("PeriodicWorkRequest")
            .build();

以上是您需要使用的全部,然后使用WorkManager enqueue开始。

    WorkManager.getInstance(context).enqueue(mPeriodicWorkRequest);
© www.soinside.com 2019 - 2024. All rights reserved.