集成某 SDK 后 APP 多了一个进程,打 log 的时候偶然发现Application 初始化了两次,虽然对 APP 本身没什么影响,但多初始化一次也没什么用 - -
解决方法就是判断当前进程是否是 APP 默认进程,是才进行初始化操作, APP 默认进程名就是包名。
@Override
public void onCreate() {
super.onCreate();
String curProcess = OsUtils.getProcessName(this, Process.myPid());
if (!getPackageName().equals(curProcess)) {
return;
}
... // 初始化操作
}
...
}
获取进程名的方法:
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 && !runningApps.isEmpty()) {
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
}
return null;
}