Задания setPeriodic запускаются дважды - PullRequest
0 голосов
/ 18 июня 2019

У меня есть две работы с разными идентификаторами, выполняющимися с разным набором интервалов, что происходит, когда через определенное время задания запускаются дважды.

следующие два задания

 public JobScheduler getDeltaDownloaderInstance(Context context){
    if(jobScheduler==null){
        jobScheduler = (JobScheduler)context.getSystemService(JOB_SCHEDULER_SERVICE);
    }
    return jobScheduler;
}

public void sync1(){
    getDeltaDownloaderInstance(this);
    ComponentName jobService = new ComponentName(this.getPackageName(), MyServiceOne.class.getName());
    JobInfo jobInfo = new JobInfo.Builder(1,jobService).
            setPersisted(true).
            setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).
            setPeriodic(900000).
            build();
    jobScheduler.schedule(jobInfo);
}

public void sync2(){
    getDeltaDownloaderInstance(this);
    ComponentName jobService = new ComponentName(this.getPackageName(), MyServiceTwo.class.getName());
    JobInfo jobInfo = new JobInfo.Builder(2,jobService).
            setPersisted(true).
            setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).
            setPeriodic(1860000).
            build();
    jobScheduler.schedule(jobInfo);
}

Вышеуказанная инициализация написана в моем классе Application, каждые 15 минут будет выполняться первое задание и каждые 31 минут будет выполняться мое второе задание.Некоторое время он работает нормально, но позже будет два экземпляра для одного задания.

Класс обслуживания один (оба класса обслуживания один и два имеют одинаковую реализацию)

public class MyServiceOne extends JobService implements MyListenerClass {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    return super.onStartCommand(intent, flags, startId);
}


@Override
public boolean onStartJob(JobParameters params) {
    HelperclassOne helper = new HelperclassOne(this,this);
    helper.somemethods();
    return false;
}

@Override
public boolean onStopJob(JobParameters params) {
    return false;
}

@Override
public void onSuccess(String response) {
    System.out.println(response);
}

@Override
public void onError(String response) {
    System.out.println(response);
}
}

В моем классе обслуживания Этовызывает мой вспомогательный класс, выполняет некоторые методы для вызова некоторых транзакций, если транзакции успешны, тогда он приходит к onSuccess (), если его ошибка приходит к onError ().

Наблюдался один сценарий, когда мои задания выполняются междусеть отключается и текущая работа останавливается.Позже, в следующем графике, задания запускаются дважды.Любая помощь будет большой благодарностью.

...