Android JobScheduler 运行 使用 setPeriodic() 时太频繁了

Android JobScheduler running way too often when using setPeriodic()

我注意到我预定的 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 设备几乎从不进入休眠模式,因为作业 运行 太频繁了。

after the data download is done I call mService.jobFinished(mParams, true); to notify the job scheduler that the job is done and it should reschedule it

这就是你的问题所在。使用 false,而不是 true.

false 表示,"the work is done for this job"。 true 表示 "we had a problem, please reschedule this job again to happen soonish"。例如,条件表明您必须具有 Internet 连接,但您可能难以连接到您的服务器。既然如此,returntrue,希望问题能稍微解决

您还可以考虑调整退避规则 via setBackoffCriteria() 以应对您确实想要 return true.

的情况