Android jobScheduler不会因jobFinished而停止(params,false)

Dan*_*aun 10 java service android android-jobscheduler

我想创建一个jobService.这是onStartJob()的样子.

@Override
public boolean onStartJob(JobParameters params) {
    Log.d(TAG, "onStartJob");
    Log.d(TAG, "Params= " + params.getJobId());
    param = params;
    jobFinished(params, false);
    //startAsync();
    return true;
}


@Override
public boolean onStopJob(JobParameters params) {
     Log.d(TAG, "onStopJob");
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这是应该启动这项工作的代码.

public void startJobScheduler(){
    Log.d(TAG, "inside startJobScheduler");
    Activity activity = this.cordova.getActivity();
    Context context = activity.getApplicationContext();


     mJobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE );
     JobInfo.Builder job = new JobInfo.Builder(111, new ComponentName(context, JobSchedulerService.class));

     job.setPeriodic(60000);
     Log.d(TAG, "before mJobScheduler.schedule(job.build())");
     if( mJobScheduler.schedule( job.build() ) <= 0 ) {
         Log.d(TAG, "job schedule failed");
     }
    Log.d(TAG, "333");
}
Run Code Online (Sandbox Code Playgroud)

我无法阻止它.它每隔1-5分钟就会持续射击.我将jobFinished(params,false)放在onStartJob()中并注释掉任务,试图在它启动后立即将其杀死,但它只是继续射击.似乎jobFinished()触发了一些东西,因为onDestroy()被调用并且我的服务被破坏了,但随后另一个作业带来了相同的ID并开始备份.

我在清单中有BIND_JOB_SERVICE,就像每个示例所示.

关于为什么jobFinished(params,false)似乎没有杀死setPeriodic(60000)的任何想法?

Tom*_*Tom 16

您已指定定期运行作业(每60秒),因此每60秒创建并执行一个新作业. jobFinished()特定于作业,只是表明它已完成执行.你没有取消任何东西.

您(当前)接受的答案适用于取消预定作业,但如果您想要的是在60秒内执行然后停止的作业,则应该省略setPeriodic()并使用setOverrideDeadline(60000).该作业将在60秒内运行,之后不再安排.


Dan*_*aun 14

好吧,如果有其他人有这个问题,我想出来了.

jobFinished()不会停止您从继续设置的周期时间.它只是告诉工作你完成了,释放唤醒锁,所以Android不必强行杀掉这份工作.

我必须做的是在我的服务中重新创建jobScheduler并调用cancelAll().你也可以显然叫取消(job_id).

jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE );
jobScheduler.cancelAll();
Run Code Online (Sandbox Code Playgroud)

  • 下面汤姆的回答应该是公认的。您正在创建一个定期工作并将其用作一次性工作,这是没有意义的,因为有正确的方法。此外,您正在取消可能已安排的所有作业,而不是您想要的作业。 (2认同)