【发布时间】:2012-02-01 17:10:48
【问题描述】:
我正在使用该函数在调用它之前查找服务是否已经在运行,这样如果它已经在运行,则该服务不会启动:-
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
为什么会这样?非常感谢任何帮助。
【问题讨论】:
-
你确定 manager 不为空吗?你能在那里加一张支票吗?您提供的堆栈跟踪中没有行号,很难预测发生了什么。
-
是的,经理不为空。当服务真正运行时函数 (iSR()) 正确返回 true 时,在执行行
Service_name.mThis.stopSelf();时会出现问题。mThis是一个公共静态变量(声明为 public static Service_name.mThis = null ; 并且在 'onStartCommand()' mThis = this ; 和 'onDestroy' mThis = null。
标签: android android-intent android-manifest android-service