JobScheduler在使用Android 5.0.2的HTC One上表现得很奇怪

时间:2017-09-26 08:01:49

标签: android android-jobscheduler

我正在开发一个使用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;
    }
}

0 个答案:

没有答案