Application中onCreate执行多次
今天我创建了三个Service并且设置了两个进程,同时在application中做初始化突然发现onCreate方法执行了多次,查阅文档才明白,原来系统启动启程时需要多次回调这个application类,因此搜索了些解决方案,发现博客文章很多解决方案都不正确。于是决定自己写一个准确的
首先我了解这个进程是以什么形式创建的,创建的数量有多少?
/**
* 获取进程名称
* @param cxt 上下文
* @return boolean值 默认为flase
*/
public void getProcessName(Context cxt) {
ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
System.out.println("result-->" + procInfo.processName+":::"+procInfo.pid);
}
}
以上是我获取所有进程的方式,再来看看结果
因为我开了两个进程,算上主进程一共是三个进程,所以这个application类被执行了三次,并且执行的时候第一次是主进程单独生成的,后面两个进程相继出现了,所以好多博客上面出现的通过包名去判断就完成不合理了,如果是做初始化或者其他需要执行的代码,肯定会被执行多次
所以我们下面针对这个特性来给与解决方案
我们主要采用的是变量的方式,静态变量虽然也可以实现但是为了做到绝对采用了局部变量的方式
public void getProcessName(Context cxt) {
int count=0;
ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.processName.contains("com.myself.pos")){
count++;
}
}
if (count<=1){
initView();
}
}
以上是我修改后的代码,后面所有的初始化都在 initView();方法中实现,内容比较简单,所以就写到这里吧,希望有什么问题可以留言哦
QQ:1335745248 发送学习进来哦