在特定时间安排日常工作

Scheduling a daily job at a particular time

我想在每天晚上 9 点发出警报,我计划使用 Periodic job scheduler 而不是 Alarm Manager 来克服 打瞌睡模式问题

我想每天晚上 9 点提醒,如何使用作业调度程序完成此操作?

以下是我的代码,这是调度周期性任务的正确方式吗?

static JobScheduler jobScheduler;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void scheduleJob(Context context) {
    Log.d("JobSchedularTest","scheduleJob.........");

    ComponentName componentName = new ComponentName(context, MyJobService.class);
    JobInfo.Builder builder = new JobInfo.Builder(100, componentName);
    // diff_nine_pm_time_in_milli = difference between current time and 9PM time
    builder.setMinimumLatency(diff_nine_pm_time_in_milli);
    builder.setOverrideDeadline(diff_nine_pm_time_in_milli);
    jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
    jobScheduler.schedule(builder.build());
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void stopJob(){
    if(jobScheduler!=null)
        jobScheduler.cancel(100);
}

如果您需要在晚上 9 点 发送警报,AlarmManager 可能仍然是您的最佳选择。如果设备处于休眠模式,则使用 JobScheduler 计划的作业将仅在维护期间执行 window。

如前所述here

The AlarmManager API is another option that the framework provides for scheduling tasks. This API is useful in cases in which an app needs to post a notification or set off an alarm at a very specific time.

尽管强烈建议不要使用 AlarmManagersetExact 方法,但如果您的应用确实依赖于精确时间提醒,那是您的最佳选择。

另一方面,如果您的警报可以根据维护 windows 和优先级桶延迟,则最好使用作业,并且您的代码似乎可以解决问题。