проверка службы выполняется из класса активности - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу знать, будет ли работать следующий метод или нет, у меня есть этот метод в самом переполнении стека, но, похоже, он не работает.

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);
}

Теперь этот executeService () вызывается каждый раз, когда пользователь попадает в MainActivity, onResume of MainActivity Я поставил проверку, как показано ниже

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

Если мой сервис уже запущен, то после того, как я вернусь в MainActivity, метод isMyServiceRunning() всегда возвращает false.

Я прошел через все вопросы-ответы, связанные с этим, но в итоге оказалсяПишу этот вопрос еще раз. Я использую Android OS Nougat. Любая помощь будет отличной.

...