Проверьте, запущена ли служба Foreground в Android OREO.

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

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

Но приведенный выше код не работает для служб переднего плана.

Я сослался на это но тоже не работает..


person Amin Pinjari    schedule 13.12.2018    source источник
comment
Из Nougat службы не будут работать в фоновом режиме через некоторое время, они будут автоматически остановлены системой, попробуйте JobService с планировщиком заданий.   -  person Paresh Rajput    schedule 13.12.2018
comment
Возможный дубликат ​​Как определить, Служба Android работает на переднем плане?   -  person Adam Hurwitz    schedule 07.06.2019
comment
это не дубликат @Adam   -  person Amin Pinjari    schedule 08.06.2019
comment
Они оба спрашивают, как проверить, запущена ли служба переднего плана @amin. Кроме того, почему вы хотите проверить, работает ли служба? Если нужно запустить или создать его, то это решение будет полезно.   -  person Adam Hurwitz    schedule 08.06.2019
comment
Нет, это решение бесполезно в пользовательской ОС, это никогда не помогает. Я пробовал это на многих устройствах и закончил, чтобы узнать, работают ли службы погоды или нет. Это совершенно другое, о чем вы думаете. @Адам   -  person Amin Pinjari    schedule 09.06.2019
comment
@ Адам, код в упомянутом вами случае устарел и больше не будет работать.   -  person MBentley    schedule 09.07.2019


Ответы (1)


API ActivityManager.getRunningServices() был устарел начиная с API 26. и больше не доступен с Oreo. Он предназначался для использования только для отладки, а не для рабочих приложений. Вы не должны полагаться на этот тип API для своего приложения.

person Larry Schiefer    schedule 13.12.2018
comment
Соглашаться! но есть ли способ проверить, работает ли служба или нет? - person Amin Pinjari; 13.12.2018
comment
Вероятно, не без большой работы, и было бы очень сложно поддерживать долгосрочную поддержку в качестве стороннего приложения. Возможно, вы сможете получить все запущенные процессы, а затем проработать каждый, чтобы найти свой пакет. Но это не скажет вам, работает ли служба. - person Larry Schiefer; 13.12.2018
comment
Кажется безумием, что они разработали эту ненадежную систему настройки сервисов, а затем не предоставили разработчикам какой-либо способ проверить, в каком состоянии они находятся. - person MBentley; 09.07.2019
comment
Он другой, но не неработоспособный. Типичный шаблон для вашего приложения (например, Activity) всегда запускает Service, а служба знает свое собственное состояние. Если он уже запущен, он может просто проигнорировать новый запрос на запуск (или использовать его для стимулирования обновления, если это необходимо). Пока это не происходит постоянно, накладные расходы, связанные с вызовом startService, должны быть незначительными. - person Larry Schiefer; 10.07.2019