Androidでは、サービスまたはプロセスにインスタンスがあるかどうかを判断します。


1.プロセスが存在するかどうかを判断する

 /**
  *         ,           pid   ,        pid     
  *
  * @return true:         false:         
  */
 public boolean isUIProcess() {
  ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));
  List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
  String mainProcessName = getPackageName();
  int myPid = android.os.Process.myPid();
  for (ActivityManager.RunningAppProcessInfo info : processInfos) {
   if (info.pid == myPid && mainProcessName.equals(info.processName)) {
    return true;
   }
  }
  return false;
 }
2.サービスがあるかどうかを判断する

 /**
  *   service      
  *     uid,        Service,         Service,                 uid,    android             
  *  pid  uid         ,       Service  ,    pid   Service pid     ,            Service              
  *   Service           , pid    ,           ,      Service     Service,         
  *
  * @param className Service   ,  PushService.class.getName()
  * @return true:Service    false:Service   
  */
 public boolean isServiceExisted(String className) {
  ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  List<ActivityManager.RunningServiceInfo> serviceList = am.getRunningServices(Integer.MAX_VALUE);
  int myUid = android.os.Process.myUid();
  for (ActivityManager.RunningServiceInfo runningServiceInfo : serviceList) {
   if (runningServiceInfo.uid == myUid && runningServiceInfo.service.getClassName().equals(className)) {
    return true;
   }
  }
  return false;
 }
注意:
上でServiceが存在するかどうかを判断しました。使っているuidとServiceの種類はフルネームで、インターネットで調べた資料は全部pidです。Serviceとメインプロセスが同じプロセスの場合、pidは問題ないですが、ServiceがリモートServiceであれば、メインプロセスと同じではないです。pidとServiceの名前で判断します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。