【问题标题】:JobScheduler not repeating jobJobScheduler 不重复工作
【发布时间】:2018-01-14 09:17:48
【问题描述】:

我正在使用 JobScheduler.setPeriodic() 来重复我的 JobIntentService。它第一次起作用,但从不重复。在 Android 7.0 上运行

ConcurrentCheck.java

int mdelaymilles  = 30000;
JobScheduler jobScheduler = (JobScheduler) mActivity.getSystemService(JOB_SCHEDULER_SERVICE);
        ComponentName componentName = new ComponentName(mActivity, ConcurrentCheckService.class);
        JobInfo jobInfo = new JobInfo.Builder(JOB_ID, componentName)
                .setPeriodic(mdelaymilles)
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .build();
        int resultCode = jobScheduler.schedule(jobInfo);
        if (resultCode == JobScheduler.RESULT_SUCCESS) {
            Log.d(LOG_TAG, "Job scheduled!");
            Intent intent = new Intent();
            intent.putExtra(LAST_POSITION, lastPosition);
            JobIntentService.enqueueWork(mActivity, ConcurrentCheckService.class, JOB_ID, intent);
        } else {
            Log.d(LOG_TAG, "Job not scheduled");
        }

【问题讨论】:

  • 你的 mdelaymilles 设置为多少?
  • @SteveMiskovetz 30 秒。已编辑
  • 您的 JobService 是否致电 jobFinished(…, false)
  • 这是一个 JobIntentService,而不是 JobService,所以它不会调用 jobFinished。 @SteveMiskovetz 的答案是正确的。 link

标签: android android-jobscheduler


【解决方案1】:

可以安排作业的最短时间为 15 分钟。如果将其设置为小于 15 分钟的值,则作业将使用 15 分钟。

在 JobInfo 中查看:MIN_PERIOD_MILLIS

另外,在代码中也可以看到这个comment

查询定期计划作业允许的最小间隔。 尝试在安排作业时声明一个更小的时间段 将产生一个仍然是周期性的作业,但会以此运行 有效期限。与您的间隔重复的任务将需要一些 其他服务,警报管理器可能会为您工作。

【讨论】:

  • 我们可以设置的最大周期间隔是多少?
  • setPeriodic 的 intervalMillis 参数是 long 类型。所以我想 2^63 -1 是最大值(以毫秒为单位的任何数字),但我更喜欢这种描述,“比生命周期更长”。
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 2017-01-11
  • 1970-01-01
相关资源
最近更新 更多