Как узнать, работает ли моя несвязанная служба? - PullRequest
1 голос
/ 23 сентября 2011

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

Моя ситуация в том, что я создаю фоновую службу веб-сервера, но не привязываюпотому что я хочу, чтобы он продолжал работать после окончания действия.Служба создает уведомление, чтобы пользователи могли видеть, что оно работает.Пользователь может остановить службу с помощью кнопки в разделе «Деятельность».

Все это работает нормально, за исключением запуска операции, я не могу определить, запущена ли служба уже.Я использую следующее:

if (isMyServiceRunning() == false)
{
  Intent ws = new Intent(this, WebServerService.class);
  startService(ws);
}

И это

private boolean isMyServiceRunning() {

    String sClassName;

    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) 
    {
        sClassName = service.service.getClassName();
        DebugMsg("Service: " + sClassName);

        if (sClassName.contains("com.<mydomain>.webservice"))
        {
              return true;
        }
    }

    return false;
}

Я получаю список работающих служб, как для системных, так и для сторонних служб.Но мой сервис не отображается в списке, хотя я знаю, что он работает.Если я захожу в Настройки телефона -> Приложения -> Запущенные службы, я вижу, что он там работает.

Я где-то читал в документации, что вызов startService для службы, которая уже запущена, должен игнорироваться.Но это не тот случай, как я вижу в отладчике, когда вызываются и OnCreate, и OnStart.

Важно, чтобы я не создавал новую службу каждый раз, потому что фоновая служба может находиться в середине обработки файла.Деятельности не нужно устанавливать связь со службой - запускайте ее, только если она не запущена, и убивайте ее, если пользователь нажимает кнопку.

Любая идея о том, почему моя служба не отображается вgetRunningServices list?

Ответы [ 2 ]

4 голосов
/ 23 сентября 2011

Шаг # 1: Добавьте static boolean isRunning=false к вашей услуге.

Шаг # 2: Установите isRunning в true в onCreate() услуги.

Шаг # 3: Установите isRunning в false в onDestroy() службы.

Шаг № 4: Изучите isRunning, чтобы проверить, работает ли служба.

Я прочиталгде-то в документации, что вызов startService для службы, которая уже работает, должен игнорироваться.Но это не тот случай, как я вижу в отладчике, когда вызываются и OnCreate, и OnStart.

Я очень уверен, что onCreate() не вызывается, когда вызывается startService()запущенный сервис.onStartCommand() (и, следовательно, onStart() для старых услуг) будет вызываться для каждого startService() вызова.

Важно, чтобы я не создавал новую службу каждый раз

Услуги натуральные одиночные.В памяти будет ровно 0 или 1 копия сервиса.Там никогда не будет 2 или более.

0 голосов
/ 26 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...