2013-01-06 22 views
0

這是我的方法用於搜索服務查找運行服務的Android

public static boolean isServiceRunning(String serviceClassName, Context context) { 
     ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
     if (activityManager == null) { 
      return false; 
     } 

     List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE); 
     if (services.isEmpty()) { 
      return false; 
     } 

     for (RunningServiceInfo runningServiceInfo : services) { 
      if (runningServiceInfo.service.getClassName().equals(serviceClassName)) { 
       return true; 
      } 
     } 

     return false; 
    } 

但有時我得到這個錯誤:

java.lang.RuntimeException: Unable to instantiate receiver com.xx.xx.receiver.BluetoothReceiver: java.lang.ClassNotFoundException: com.xx.xx.receiver.BluetoothReceiver 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2111) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.app.ActivityThread.access$1500(ActivityThread.java:127) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.os.Looper.loop(Looper.java:137) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.app.ActivityThread.main(ActivityThread.java:4511) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at dalvik.system.NativeStart.main(Native Method) 
01-06 17:39:38.990: E/AndroidRuntime(7259): Caused by: java.lang.ClassNotFoundException: com.xx.x.receiver.BluetoothReceiver 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
01-06 17:39:38.990: E/AndroidRuntime(7259):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2106) 

是它聰明地使用這種方法。我想查找服務是否正在運行。如果不是,我手動運行它。

回答

1

but sometimes i get this error:

該錯誤似乎與您所顯示的代碼無關。

I want to find if service is running or not. And if not i run it manually.

剛開始服務。如果它已經在運行,除了將再次調用onStartCommand()之外,什麼都不會發生。如果它尚未運行,則會創建一個服務實例,並調用onCreate(),然後使用onStartCommand()進行調用。

+0

非常好的主意。將嘗試它。謝謝 – senzacionale