gpt4 book ai didi

android - 定期 JobScheduler 不遵守约束

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:34 27 4
gpt4 key购买 nike

使用 JobScheduler , 我设置了一个简单的 JobService如下:

@TargetApi(21)
public class SimpleJobService extends JobService {
private static final String TAG = "SimpleJobService";

@Override
public boolean onStartJob(JobParameters jobParameters) {
if (jobParameters.isOverrideDeadlineExpired()) {
Log.d(TAG, "This shouldn't happen");
Toast.makeText(this, "This shouldn't happen", Toast.LENGTH_LONG).show();
}
jobFinished(jobParameters, false);

return true;
}

@Override
public boolean onStopJob(JobParameters jobParameters) {
return true;
}
}

然后我将 JobService 设置为周期性(每分钟)并且需要不限流量的网络和收费:

    ComponentName jobServiceComponent = new ComponentName(this, SimpleJobService.class);

JobInfo.Builder builder = new JobInfo.Builder(2, jobServiceComponent);
builder.setPersisted(true);
builder.setPeriodic(60000);
builder.setRequiresCharging(true);

builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());

我的 SimpleJobServiceonStartJob 被调用,无论我的设备是在充电还是在不按流量计费的网络上。

setPeriodic(long) 的文档说它不能与 setOverrideDeadline(long) 结合使用(无论如何我都不是),但令我惊讶的是 onStartJob 中的 jobParameters.isOverrideDeadlineExpired() 在这种设置下一直是 true

我是不是漏掉了什么?

这对我来说像是一个 Android 错误,但令我惊讶的是我找不到其他人报告此问题。

此行为是在 Android 6.0.1 上观察到的

最佳答案

the source code 中所示,周期性作业具有周期结束的隐式截止日期.

就像明确设置截止日期一样,这让您有机会决定如何最好地处理延长的时间段(您会注意到有一个最小间隔,可在 Android 7.0+ 设备上使用 getMinPeriodMillis() 查询)当您条件不满足。例如,如果您的约束是硬性要求,您可以调用 jobFinished(jobParameters, false) 来等待下一个周期终点或条件为真。

关于android - 定期 JobScheduler 不遵守约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com