JobScheduler и Android не останавливаются jobFinished(параметры, значение 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)?

2 ответов


вы указали, что задание выполняется периодически (каждые 60 секунд), поэтому каждые 60~ секунд создается и выполняется новое задание. jobFinished() относится к заданию и просто указывает, что оно выполняется. Ты ничего не отменил.

ваш (в настоящее время) принятый ответ работает для отмены запланированного задания, но если все, что вы хотите, это задание, которое выполняется в течение 60 секунд, а затем останавливается, вы должны ommit setPeriodic() и использовать setOverrideDeadline(60000) вместо. Работы будут выполняться в течение 60 секунды и больше не будут запланированы после него.


Ну, я понял, если у кого-то еще есть эта проблема.

jobFinished () не остановит периодическое время, которое вы установили от продолжения. Он просто говорит работе, что вы закончили, чтобы освободить wakelock, поэтому Android не должен убивать работу насильно.

Мне нужно было воссоздать jobScheduler в моем сервисе и вызвать cancelAll(). Также можно видимо позвонить отменить(аргумент job_id).

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