我的工作未在待处理职位中列出:android JobScheduler

时间:2018-03-22 05:35:43

标签: android android-service job-scheduling android-jobscheduler android-job

方案

您好, 当我来到我的HomeScreen时,我有一个JobService。这个工作服务从我的数据库中取出我的请求,并在互联网可用时执行它们。因此,即使设备处于脱机状态,我也会在我的数据库中插入交易,当互联网到来时,我的JobService会执行这些交易。

问题

问题是我从许多屏幕来到我的HomeScreen。所以每次我来到HomeScreen,我都会再次启动JobService。因此,如果我在互联网出现之前三次来到我的HomeScreen,现在有三种不同的服务正在运行同样的任务。所以我想检查服务是否已经运行,我不会启动它。

我尝试过什么

启动JobService的代码非常简单。我写了一个方法来启动它并在OnCreate()

中调用它
public JobScheduler initQueue(Context context){
    if(jobScheduler==null){
        jobScheduler = (JobScheduler)context.getSystemService(JOB_SCHEDULER_SERVICE);
    }
    return jobScheduler;
}
public void executeQueue(){
    initQueue(this);
    ComponentName jobService = new ComponentName(this.getPackageName(), OfflineQueueService.class.getName());
    JobInfo jobInfo = new JobInfo.Builder(2,jobService).
            setPersisted(true).
            setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).
            build();
    jobScheduler.schedule(jobInfo);
}

我在executeQueue中致电onCreate()。 我在StackOverflow上搜索并找到了这个链接:

How to check JobService is running or not in android?

所以我现在在我的HomeScreen中有这个方法来检查我的JoService是否正在运行:

public static boolean isJobServiceOn( Context context ) {
    JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

    boolean hasBeenScheduled = false ;
    List<JobInfo> list =scheduler.getAllPendingJobs();
    for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
        if (jobInfo.getId() == 2 ) {
            hasBeenScheduled = true ;
            break ;
        }
    }

    return hasBeenScheduled ;
}

但是在这个方法中,它从不列出我的JobService运行,每次都得到false,因此再次遇到了JobService的多个实例的同样问题。

我希望我明白我的问题。

0 个答案:

没有答案