在Android中使用JobScheduler调度作业

我在新的Android API 21中使用JobScheduler计划的作业存在问题。这是我以60秒间隔计划作业的代码,如下所示:

ComponentName serviceName = new ComponentName(this, MyJobService.class); JobInfo jobInfo = new JobInfo.Builder(0, serviceName) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setPeriodic(60000) .build(); 

我的JobService只在Logcat中打印运行时间,但日志显示服务在这个时候运行:

 03-18 08:37:26.334: I/JOB(32662): Wed Mar 18 08:37:26 BRT 2015 03-18 08:37:56.364: I/JOB(32662): Wed Mar 18 08:37:56 BRT 2015 03-18 08:39:21.418: I/JOB(32662): Wed Mar 18 08:39:21 BRT 2015 03-18 08:41:51.670: I/JOB(32662): Wed Mar 18 08:41:51 BRT 2015 03-18 08:45:52.192: I/JOB(32662): Wed Mar 18 08:45:52 BRT 2015 03-18 08:54:20.678: I/JOB(32662): Wed Mar 18 08:54:20 BRT 2015 

这很奇怪,因为Job在1分钟内至less应该执行1次,因为我使用setPeriodic(60000)方法进行设置。 运行间隔增加也是很好奇的。 在这一刻,时间是星期三3月18日09:09:00 BRT 2015和工作不被执行更多。

这是JobScheduler API的问题吗? (我使用Android 5.0.1在Nexus 5中运行)

Solutions Collecting From Web of "在Android中使用JobScheduler调度作业"

时间的变化与重新就业的退休标准有关。 默认情况下,它被设置为指数。 我猜你也没有正确地完成你的工作,当你完成它通过调用jobFinished(JobParameters params, boolean needsReschedule)

我写了一篇关于JobScheduler所有小东西的博客文章 。 我强烈推荐阅读。

我有同样的问题,我认为它可能与JobInfo类的内部需求连接:

  /* Minimum interval for a periodic job, in milliseconds. */ private static final long MIN_PERIOD_MILLIS = 15 * 60 * 1000L; // 15 minutes 

它看起来像JobInfo不会让你把时间间隔小于这一点。