Android 为什么检查服务是否正在运行时会出现错误

Android 为什么检查服务是否正在运行时会出现错误,android,android-intent,android-manifest,android-service,Android,Android Intent,Android Manifest,Android Service,在调用某个服务之前,我使用该函数查找该服务是否已在运行,以便在该服务已在运行时不会启动该服务:- private boolean iSR() { String sClassName; ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for (RunningServiceInfo service : manager.getRunning

在调用某个服务之前,我使用该函数查找该服务是否已在运行,以便在该服务已在运行时不会启动该服务:-

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>

为什么会这样?非常感谢您提供的任何帮助。

如果您再次从客户端启动服务,则已启动的服务(在您的情况下,已创建专用流程,并且已对服务组件调用onCreate)将不会再次“启动”(除非该服务已自行停止或在内存不足的情况下被系统终止)。但是,您的服务将收到几个onStartCommand调用

因此,通常不必检查服务是否正在运行,系统将根据是否需要启动和停止服务


而且,在一个单独的进程中运行服务以加快应用程序的速度可能表明您在应用程序主线程中做了很多事情。您应该重新考虑您的决定,因为如果您有两个进程而不是一个进程,应用程序通常会对系统产生更大的影响。

您确定manager不为空吗?可以吗在那里添加检查?您提供的堆栈跟踪中没有行号,很难预测发生了什么。是的,管理器不是空的。问题发生在函数(iSR()时执行行
服务\u name.mThis.stopSelf();
时当服务真正运行时,正确返回true。
mThis
是一个公共静态变量(声明为公共静态服务\u name.mThis=null;在“onStartCommand()”中,mThis=this;以及“onDestroy”mThis=null。
..java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xyz.abc/com.xyz.abc.main}: java.lang.NullPointerException