正常情況下,整個android應用程序的application的onCreate方法只會在程序運行的時候執行一次,但是也有特殊情況,那就是在應用中開啟了遠程服務,遠程服務運行在一個單獨的進程當中,這個時候application的onCreate方法會被重復調用。很多時候我們希望Application中初始化方法只執行一次,因此就要進行一下判斷,判斷Application的onCreate方法執行是不是因為開啟了遠程服務。
判斷的原理是通過進程id獲取進程的名稱,如果進程的名稱和當前應用報名不一致,那么就是遠程服務的進程,默認情況下主進程的名稱就是應用的包名。
private String getAppName(int pID) {
String processName = null;
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcessInfos = am.getRunningAppProcesses();
Iterator<RunningAppProcessInfo> i = runningAppProcessInfos.iterator();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
try {
if (info.pid == pID) {
processName = info.processName;
return processName;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return processName;
}
通過 android.os.Process.myPid()可以獲取到進程的id,通過上面的方法就可以獲取到進程的名稱。
遠程服務的進程名稱是由AndroidManifest.xml 文件中service標簽下的 android:process屬性來決定的。經過測試此名稱必須以.開頭 名稱可以自己定 通過上面方法得到的遠程服務的名稱就是.+名稱。
