Android JobScheduler总是工作1分钟

onC*_*ate 11 android android-jobscheduler

我正在尝试使用新的JobScheduler实现后台刷新服务(compat by tatarka).这是我的服务

@Override
public boolean onStartJob(JobParameters params) {
    Timber.i("on start job: " + params.getJobId());
    return true;
}

@Override
public boolean onStopJob(JobParameters params) {
    Timber.i("on stop job: " + params.getJobId());
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是我的JobInfo

public void scheduleJob(View v) {
    JobInfo job = new JobInfo.Builder(kJobId++ /*jobid*/, new ComponentName(getActivity(), RefreshJobService.class))
            .setPeriodic(2000)
            .build();
    mTestService.scheduleJob(job);
}
Run Code Online (Sandbox Code Playgroud)

在日志中我看到我的工作总是工作1分钟 12-31 12:38:03.884 10059-10059/@/RefreshJobService? on stop job: 0 12-31 12:39:03.891 10059-10059/@/RefreshJobService? on start job: 0 12-31 12:40:03.911 10059-10059/@/RefreshJobService? on stop job: 0 12-31 12:42:08.841 10059-10059/@/RefreshJobService? on start job: 0 12-31 12:43:08.858 10059-10059/@/RefreshJobService? on stop job: 0

所以为什么?我定期设置为2000ms,任何值都不会影响1分钟的工作间隔.为什么?

gre*_*f82 7

在Android 5.1.1之前,单个作业的超时时间为60秒.从Android 6开始,超时现在是10分钟.


Tom*_*Tom 7

onStopJob当系统想要取消你的工作时调用.它取消你的工作的原因是因为它认为它仍在运行.您需要jobFinished(params, bool)在工作中的某个时刻打电话告诉调度程序它已完成,否则它会超时并致电onStopJob取消它.另外,返回'true'会onStartJob告诉系统你没有完成处理.你应该返回'假',除非你还在做额外的工作,例如.将工作传递给一个单独的线程.

@Override
public boolean onStartJob(JobParameters params) {
    Timber.i("on start job: " + params.getJobId());
    jobFinished(params, false);
    return false;
}
Run Code Online (Sandbox Code Playgroud)


小智 6

从 API 26 (Oreo) 开始,为周期性作业设置小于 15 分钟的时间段将至少在 15 分钟后执行。


43m*_*hew 3

听起来您好像在问为什么在工作开始后一分钟就出现 onStopJob 。此 1 分钟超时在此处的代码中定义