我注意到我的预定JobScheduler经常执行作业方式。我把它设置为每天执行,它需要闲置,处于wlan并充电,但是当满足这些条件时,工作就像每10分钟甚至更频繁地执行。
我的代码:
JobInfo.Builder builder = new JobInfo.Builder(1,
new ComponentName(context.getPackageName(), SyncJobService.class.getName()));
builder.setPeriodic(TimeUnit.DAYS.toMillis(1))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setRequiresCharging(true)
.setRequiresDeviceIdle(true);
int code = jobScheduler.schedule(builder.build());
if (code <= 0) {
Log.e(TAG, "Could not scheduled job: " + code);
return;
}
Log.e(TAG, "Scheduled job");
作业执行后台线程从互联网下载数据,数据下载完成后我打电话
mService.jobFinished(mParams, true);
通知作业调度程序作业已完成,并应重新安排作业。即使这段时间设定为一天,工作怎么经常执行?我的android 6.0.1设备几乎从不进入打盹模式,因为工作经常运行。
答案 0 :(得分:18)
数据下载完成后,我调用
mService.jobFinished(mParams, true);
通知作业调度程序作业已完成,并应重新安排作业
那是你的问题。使用false
,而不是true
。
false
说,&#34;工作已经完成了这项工作&#34;。 true
说&#34;我们遇到了问题,请重新安排这份工作,以便尽快发生#34;。例如,标准说您必须具有Internet连接,但是您可能无法连接到服务器。在这种情况下,请返回true
,希望问题能够稍微解决。
对于您真正想要返回true
的情况,您也可以考虑调整退避规则via setBackoffCriteria()
。