Почему проверка, работает ли служба или нет, выдает ошибку - PullRequest
3 голосов
/ 01 февраля 2012

Я использую функцию, чтобы узнать, запущена ли уже служба, прежде чем вызывать ее, чтобы служба не запускалась, если она уже запущена: -

private boolean iSR() {

        String sClassName;

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

            if (sClassName.contains("com.abc.def.Service_name"))
            {

                  return true;
            }
        }

        return false;
}

И мне нужно запустить службу вотдельный процесс, так как в противном случае это приведет к замедлению работы приложения.Следовательно, в манифесте: -

<service android:name=".Service_name" android:process=":my_process"  >  </service>

Но если служба работает и функция вызывается, она выдаст ошибку, подобную этой: -

..java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xyz.abc/com.xyz.abc.main}: java.lang.NullPointerException

Почему это так?Любая помощь высоко ценится.

1 Ответ

2 голосов
/ 03 февраля 2012

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

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

И запуск вашего сервиса в отдельном процессе для ускорения работы вашего приложения может быть признаком того, что вы выполняете много работы в главном потоке приложения. Вам следует пересмотреть свое решение, поскольку ваше приложение, как правило, оказывает большее влияние на систему, если у вас есть два процесса вместо одного.

...