0

我想知道以下方法是否有效,我在堆栈溢出本身中有这个方法,但它似乎不起作用。

private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

我有一个作业服务,它将每 15 分钟执行一次,我正在使用作业调度程序在提到的任何时间触发服务。我有一个方法作为 executeService() 如下:

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

public void executeService(){
    initJob(this);
    ComponentName jobService = new ComponentName(this.getPackageName(), OfflineService.class.getName());
    JobInfo jobInfo = new JobInfo.Builder(2,jobService).
            setPersisted(true).
            setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).
            setPeriodic(millisecondsQueue).
            build();
   int jobId = jobScheduler.schedule(jobInfo);
}

现在每次用户来到 MainActivity 时都会调用这个 executeService(),在 MainActivity 的 onResume 中我已经进行了如下检查

if(!isMyServiceRunning(OfflineService.class)){
    executeService();
}

如果我的服务已经被触发,那么在我回到 MainActivity 之后,该方法isMyServiceRunning()总是返回 false。

我已经完成了与此相关的所有问题的答案,但我最终再次写了这个问题,我使用的是 Android OS Nougat。任何帮助都会很棒。

4

0 回答 0