使用setPeriodic()时,Android JobScheduler经常运行

时间:2016-04-29 18:25:05

标签: android synchronization android-wifi job-scheduling milliseconds

我注意到我的预定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设备几乎从不进入打盹模式,因为工作经常运行。

1 个答案:

答案 0 :(得分:18)

  

数据下载完成后,我调用mService.jobFinished(mParams, true);通知作业调度程序作业已完成,并应重新安排作业

那是你的问题。使用false,而不是true

false说,&#34;工作已经完成了这项工作&#34;。 true说&#34;我们遇到了问题,请重新安排这份工作,以便尽快发生#34;。例如,标准说您必须具有Internet连接,但是您可能无法连接到服务器。在这种情况下,请返回true,希望问题能够稍微解决。

对于您真正想要返回true的情况,您也可以考虑调整退避规则via setBackoffCriteria()