我正在尝试使用新的JobScheduler(由tatarka提供的兼容库)实现后台刷新服务。以下是我的代码:
@Override
public boolean onStartJob(JobParameters params) {
Timber.i("on start job: " + params.getJobId());
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
Timber.i("on stop job: " + params.getJobId());
return true;
}
这是我的工作信息
public void scheduleJob(View v) {
JobInfo job = new JobInfo.Builder(kJobId++ /*jobid*/, new ComponentName(getActivity(), RefreshJobService.class))
.setPeriodic(2000)
.build();
mTestService.scheduleJob(job);
}
在日志中我发现我的作业总是每分钟工作一次:
12-31 12:38:03.884 10059-10059/@/RefreshJobService﹕ on stop job: 0
12-31 12:39:03.891 10059-10059/@/RefreshJobService﹕ on start job: 0
12-31 12:40:03.911 10059-10059/@/RefreshJobService﹕ on stop job: 0
12-31 12:42:08.841 10059-10059/@/RefreshJobService﹕ on start job: 0
12-31 12:43:08.858 10059-10059/@/RefreshJobService﹕ on stop job: 0
那为什么呢?我将周期设置为 2000 毫秒,但任何值都不影响作业的每分钟间隔。为什么?
JobScheduler
并不适用于如此短的时间间隔,它更适合在几个小时内刷新某些内容。在您的应用程序中,应该使用Handler.postDelayed
或类似方法来实现。 - Dan Hulme