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

qwe*_*rtz 11 android synchronization milliseconds job-scheduling android-wifi

我注意到我的预定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");
Run Code Online (Sandbox Code Playgroud)

该作业执行后台线程从互联网下载数据,完成数据下载后,我打电话

mService.jobFinished(mParams, true);
Run Code Online (Sandbox Code Playgroud)

通知作业调度程序作业已完成,并应重新计划.即使这段时间设定为一天,工作怎么经常执行?我的android 6.0.1设备几乎从不进入打盹模式,因为工作经常运行.

Com*_*are 18

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

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

false他说,"这项工作已经完成了".true说"我们遇到了问题,请重新安排这份工作,以便尽快完成".例如,标准说您必须具有Internet连接,但是您可能无法连接到服务器.在那种情况下,返回true,希望问题会稍微消失.

你也可以考虑调整回退规则,通过setBackoffCriteria()对这些情况下,你真的想返回true.

  • 哦,这解释了我遇到的问题.好像我误解了文档.谢谢! (2认同)