我想在每天晚上9点发出警报,我计划使用定期作业调度程序而不是告警管理器来克服午睡模式问题。
如何使用作业调度程序来完成这一任务,因为我希望每天晚上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);
}发布于 2019-01-20 20:04:52
如果您需要在晚上9点提供一个警报,那么AlarmManager可能仍然是您的最佳选择。如果设备处于打瞌睡模式,则使用JobScheduler计划的作业只能在维护窗口期间执行。
如前所述,这里
AlarmManager API是框架为调度任务提供的另一个选项。在应用程序需要在非常特定的时间发布通知或触发警报的情况下,此API非常有用。
尽管AlarmManager的setExact方法非常不受欢迎,但如果你的应用程序确实依赖于精确的时间提醒,那也是你最好的选择。
另一方面,如果您的警报可能会根据维护窗口和优先级桶而延迟,最好使用作业,而您的代码似乎做到了这一点。
https://stackoverflow.com/questions/54275541
复制相似问题