Androidでは、サービスまたはプロセスにインスタンスがあるかどうかを判断します。
1.プロセスが存在するかどうかを判断する
上でServiceが存在するかどうかを判断しました。使っているuidとServiceの種類はフルネームで、インターネットで調べた資料は全部pidです。Serviceとメインプロセスが同じプロセスの場合、pidは問題ないですが、ServiceがリモートServiceであれば、メインプロセスと同じではないです。pidとServiceの名前で判断します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
/**
* , 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の名前で判断します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。