原因
应用中有多个进程,每个进程对应一个application,多进程项目会出现该情况。
总而言之,当应用配置了多个进程的时候,application对象的onCreate方法就会执行多次
如何确定是否为多进程应用
- 合并后的
Manifest.xml查找"android:process"属性;常见于四大组件 Manifest.xml中application节点配置自定义application,在onCreate()中获取哪些进程调用
public class MyApplication extends Application{
@Override
public void onCreate() {
String processName = getProcessName(this, android.os.Process.myPid());
Log.e("processName", "进程名字:" + processName + "/");
}
private String getProcessName(Context cxt, int pid) {
//获取ActivityManager对象
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中重复初始化资源
1、 目前使用的是在Application中判断进程名,只有属于当前应用进程在进行初始化资源
public class MyApplication extends Application{
@Override
public void onCreate() {
String processName = getProcessName(this, android.os.Process.myPid());
if (processName != null) {
boolean defaultProcess = processName.equals("当前应用包名");//可在AndroidManifest.xml头部节点看到
if (defaultProcess) {
init();
}
}
}
private String getProcessName(Context cxt, int pid) {
//获取ActivityManager对象
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;
}
}
2、 找到新的再补充...