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

我想创建一个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; } 

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

 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"); } 

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

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

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

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

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

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

jobFinished()不会停止您从继续设置的周期时间。 它只是告诉工作你已完成,释放唤醒锁,因此Android不必强行终止工作。

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

 jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE ); jobScheduler.cancelAll();