首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在特定时间安排一项日常工作

在特定时间安排一项日常工作
EN

Stack Overflow用户
提问于 2019-01-20 10:30:25
回答 1查看 506关注 0票数 0

我想在每天晚上9点发出警报,我计划使用定期作业调度程序而不是告警管理器来克服午睡模式问题

如何使用作业调度程序来完成这一任务,因为我希望每天晚上9点发出警报?

下面是我的代码,这是安排定期任务的正确方式吗?

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 20:04:52

如果您需要在晚上9点提供一个警报,那么AlarmManager可能仍然是您的最佳选择。如果设备处于打瞌睡模式,则使用JobScheduler计划的作业只能在维护窗口期间执行。

如前所述,这里

AlarmManager API是框架为调度任务提供的另一个选项。在应用程序需要在非常特定的时间发布通知或触发警报的情况下,此API非常有用。

尽管AlarmManagersetExact方法非常不受欢迎,但如果你的应用程序确实依赖于精确的时间提醒,那也是你最好的选择。

另一方面,如果您的警报可能会根据维护窗口和优先级桶而延迟,最好使用作业,而您的代码似乎做到了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54275541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档