【发布时间】:2015-11-11 19:16:24
【问题描述】:
JobScheduler 多次调用onStartJob(),尽管作业已完成。一切正常,如果我安排一个工作并等到它完成。但是,如果我同时安排两个或多个具有不同 ID 的作业,则在调用 jobFinished() 后会再次调用 onStartJob()。
比如我调度job 1和job 2除了ID之外的参数完全相同,那么顺序是:
-
onStartJob()工作 1 和工作 2 - 两个作业都完成了,所以两个作业都调用了
jobFinished() - 之后,
onStartJob()再次为具有相同 ID 的两个作业调用
我的工作很基础,并不复杂。
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
我不知道怎么了。
【问题讨论】:
-
我遇到了同样的问题,@vRallev。我可以避免作业运行两次的唯一方法是从
onStartJob()返回false(即使我当时设置了AsyncTask运行)。虽然这似乎对我有用,但我怀疑它将来会导致问题,系统认为工作已经完成并过早终止进程。你有没有找到解决这个问题的方法?
标签: android jobs job-scheduling