最近項目中遇到一個問題:APP運行2個進程,然後發現APP的Application的onCreate被調用了兩次,導致Application初始化了兩次,造成app啓動的時候非常緩慢而且已啓動佔用的內存很大,因爲兩個進程都初始化了相同的資源,而且兩個進程是相互獨立的,所以各自初始化的資源都是獨立的,也就是初始化了兩份一樣的資源;
原因:APP運行多進程導致Application被初始話多次
解決方案:獲取當前進程的名稱,然後根據進程名稱匹配你要初始化的進程,再初始化相關進程的Applicaition
public static String getProcessName(Context cxt, int pid) {
ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
if (runningApps == null) {
return null;
}
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
return null;
}
然後在Application裏面添加:
// 多進程導致多次初始化Application,這裏只初始化App主進程的Application
String curProcessName = getCurProcessName(this);
if (!curProcessName.equals(getPackageName())) {
return;
}