在特定时间安排日常工作
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.
尽管强烈建议不要使用 AlarmManager
的 setExact
方法,但如果您的应用确实依赖于精确时间提醒,那是您的最佳选择。
另一方面,如果您的警报可以根据维护 windows 和优先级桶延迟,则最好使用作业,并且您的代码似乎可以解决问题。
我想在每天晚上 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.
尽管强烈建议不要使用 AlarmManager
的 setExact
方法,但如果您的应用确实依赖于精确时间提醒,那是您的最佳选择。
另一方面,如果您的警报可以根据维护 windows 和优先级桶延迟,则最好使用作业,并且您的代码似乎可以解决问题。