“setRequireDeviceIdle” 方法是怎样工作的?根据我在 Android 文档中(https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiresDeviceIdle(boolean))所了解的,它应该保证只有在没有与设备交互时才会启动任务。
但我的经验与此不同:
private void scheduleRestartJob(){
ComponentName mServiceComponent = new ComponentName(this, RelaunchAppJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(1002, mServiceComponent);
builder.setRequiresDeviceIdle(true);
builder.setPersisted(true);
builder.setOverrideDeadline(10000);
mJobScheduler.schedule(builder.build());
}
如果我退出应用程序并开始使用另一个应用程序,无论我是否活动,工作始终会在10秒后运行。
setPeriodic
而没有使用setOverrideDeadline
时出现这种行为的原因是,尽管文档中说了什么,但setPeriodic
似乎会隐式地设置一个覆盖期限并忽略所有其他要求。看起来你可以通过在onStartJob
方法中放置一个if (!jobParameters.isOverrideDeadlineExpired())
检查来解决这个 bug。 - HexAndBugs