我正在开发一个使用Android 5.0中引入的JobScheduler API的应用。我安排工作并在执行时记录。除了运行Anroid 5.0.2的HTC One之外,这在我的测试设备上运行良好。
HTC设备根本不考虑约束。我使用setMinimumLatency和setOverrideDeadline,但是在截止日期后几个小时正在执行作业。最近我可以看到,在不同时间安排的工作都是一次性冲洗,太晚了很多时间。
有人可以向我解释一下吗?我真的不明白。这些是该API的基础,(afaik)不在设备制造商手中进行修改。这个问题是否特定于Android版本? (我还没有在更多设备上测试它)
虽然这不是与代码相关的问题,但由于它在大多数设备上按预期工作,我还是会发布它。这就是我安排工作的方式:
mJobScheduler = (JobScheduler) MainApplication.get().getSystemService(Context.JOB_SCHEDULER_SERVICE);
mJobScheduler.cancelAll();
JobInfo.Builder builder = new JobInfo.Builder(StateFeedbackJobService.JOB_ID,
new ComponentName(MainApplication.get(), StateFeedbackJobService.class.getName()));
builder.setMinimumLatency(Config.NOTIFICATION_DELAY_MIN);
builder.setOverrideDeadline(Config.NOTIFICATION_DELAY_MAX);
if (mJobScheduler.schedule(builder.build()) <= 0) {
// error
} else {
// success
}
这是作业的实施
public class StateFeedbackJobService extends JobService {
public static final int JOB_ID = 2;
private JobScheduler mJobScheduler;
public StateFeedbackJobService() {
mJobScheduler = (JobScheduler) MainApplication.get().getSystemService(Context.JOB_SCHEDULER_SERVICE);
}
private Handler mJobHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
// do some work
jobFinished((JobParameters) msg.obj, false);
return true;
}
});
@Override
public boolean onStartJob(JobParameters params) {
// job started
mJobHandler.sendMessage(Message.obtain(mJobHandler, 1, params));
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
// job stopped
mJobHandler.removeMessages(1);
return false;
}
}