【发布时间】:2017-04-04 22:01:06
【问题描述】:
使用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());
无论我的设备是在充电还是在未计量的网络上,都会调用我的SimpleJobService 的onStartJob。
setPeriodic(long) 的文档说它不能与 setOverrideDeadline(long) 一起使用(我反正不是),但我很惊讶 onStartJob 中的 jobParameters.isOverrideDeadlineExpired() 永远是 true这个设置。
我错过了什么吗?
这对我来说似乎是一个 Android 错误,但我很惊讶我找不到其他人报告此问题。
在 Android 6.0.1 上观察到此行为
【问题讨论】:
标签: android android-jobscheduler