setPeriodic作业被触发两次

时间:2019-06-18 07:20:47

标签: java android background-process android-jobscheduler jobservice

我有两个具有不同ID的作业以不同的时间间隔运行,发生的情况是在一定时间后两次触发作业。

以下是两个工作

 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()。

观察到一种情况,其中我的作业在网络之间执行,该作业关闭并且当前作业已停止。稍后,在下一个计划中,作业将触发两次。 任何帮助都将非常感谢。

0 个答案:

没有答案