我正在使用该函数在调用之前查找服务是否已在运行,以便在服务已经运行时不启动该服务: -
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
为什么会这样?任何帮助都非常感谢。
答案 0 :(得分:2)
已经启动的服务(在您的情况下已创建专用进程并且已在服务组件上调用onCreate)如果您第二次从客户端启动service,则不会再次“启动”(除非服务已自行停止或在低内存情况下被系统杀死)。但是,您的服务将获得几个onStartCommand调用。
因此,通常您不必检查服务是否正在运行,系统将根据是否需要启动和停止服务。
而且,在一个单独的进程中运行您的服务以加速您的应用程序可能表明您在应用程序主线程中做了很多事情。您应该重新审视您的决定,因为如果您有两个流程而不是一个流程,您的应用程序通常会对系统产生更大的影响。