即使作业已经完成,JobScheduler仍会多次调用onStartJob()
。如果我只安排一个单一的作业并等待它完成,一切都正常。但是,如果我同时安排两个或更多具有不同ID的作业,则在调用jobFinished()
之后,onStartJob()
将再次被调用。
例如,我使用完全相同的参数为作业1和作业2安排作业,然后顺序如下:
- 作业1和作业2的
onStartJob()
- 两个作业完成,因此为它们的
jobFinished()
调用 - 之后,对于具有相同ID的两个作业,
onStartJob()
再次被调用
我的工作非常基础且简单。
public class MyJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters params) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// do something
} finally {
// do not reschedule
jobFinished(params, false);
}
}
}).start();
// yes, job running in the background
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
// mark my background task as stopped
// do not reschedule
return false;
}
}
我是这样安排作业的
JobInfo jobInfo = createBaseBuilder(request)
.setMinimumLatency(2_000L)
.setOverrideDeadline(4_000L)
.setRequiresCharging(false)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.build();
int scheduleResult = mJobScheduler.schedule(jobInfo);
// is always success
我不知道哪里出了问题。
onStartJob()
中返回false
(即使此时我已经设置了一个AsyncTask
正在运行)。虽然这对我来说似乎有效,但我怀疑它会在未来引起问题,因为系统会认为任务已经完成并过早地终止进程。你有找到解决办法吗? - drmrbrewer