3

设想

嗨,我有一个 JobService,当我来到我的 HomeScreen 时会启动它。这项工作服务从我的数据库中取出我的请求,并在互联网可用时执行它们。因此,即使设备处于脱机状态,我也会将我的事务插入我的数据库中,每当互联网出现时,我的 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 上搜索并找到了这个链接:

如何检查 JobService 是否在 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 多个实例的相同问题。

我希望我把我的问题说清楚了。

4

0 回答 0