Android JobScheduler onStartJob多次调用

vRa*_*lev 15 jobs android job-scheduling

JobScheduler多次调用onStartJob(),但作业已完成.一切工作正常,如果我安排一个单一的工作,并等到它完成.但是,如果我同时安排两个或多个具有不同ID的作业,则onStartJob()在调用后再次调用jobFinished().

例如,我使用除ID之外的完全相同的参数来安排作业1和作业2,然后顺序为:

  1. onStartJob() 对于工作1和工作2
  2. 两个作业都完成了,所以jobFinished()它们都被调用了
  3. 之后,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我安排这样的工作

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
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题.

小智 4

我猜这是由待处理的作业引起的,所以我在服务启动后调用 mJobScheduler.cancelAll() ,问题解决了。

  • 我不明白。您安排作业(JobService),然后立即调用cancellAll()?完成后,JobService 是否应该自行停止(并且不让系统根据OP 再次启动它)? (2认同)