Android Application中的OnCreate方法执行两次

在Application中开启了一个子线程,但是每次子线程都会执行两次,非常郁闷。

这时候看它执行两次的时候就去验证他的大方法是否执行了两次,然后发现线程创建了两次;

再看他的大方法执行了几次,它的大方法就是OnCreate方法,虽然我觉得它不会执行两次,但是我们一定要进行排除,否则任何一种情况都会出现。

所以打了个Log发现OnCreate方法也执行了两次。

这就找到根由了,所以在网上找了Application的OnCreate方法为什么会执行两次,就解决了。

因为这次卡壳了一天,所以就写下来记录一下,这里有两点需要注意,

第一就是找错的方法,一定要逐个排查,把它们的值打出来,在你找到错误地方之前任何一个地方都是有可能出错的,不要觉得某个地方一定不会出错;

第二个就是这个知识点,下边记录一下。



以下为转载内容,附上原地址:http://blog.csdn.net/chy555chy/article/details/51374603



在做"个推"时发现官方文档中有这么一个注释:

该方法必须在Activity或Service类内调用,一般情况下,可以在Activity的onCreate()方法中调用。由于应用每启动一个新的进程,就会调用一次Application的onCreate()方法,而个推SDK是一个独立的进程,因此如果在Application的onCreate()中调用intialize接口,会导致SDK初始化在一个应用中多次调用,所以不建议在Application继承类中调用个推SDK初始化接口。

        解释一下,每个Android应用都要运行在一个虚拟机上,”个推“采用Service和后台服务器通信进行通信,于是和原本的Activity就形成了多进程。一个前台的应用进程,一个service后台进程,每个进程对应一个application对象,所以当应用配置了多个进程的时候,application对象的onCreate方法就会执行多次,所以为了保证只初始化一次,就必须做出区分的处理的(“个推”中提到的在Activity或Service中初始,这种做法个人认为也是存在多次初始化的风险的)

        进程名是通过Manifest.xml中的"android:process"属性设置的,因此可以在application的onCreate方法中通过pid获取processName,再做进一步的判断(跟android:process的值进行判断)使得相关初始化代码仅执行一次。

在application中添加如下代码:

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		String processName = getProcessName(this, android.os.Process.myPid());
		if(processName != null){
			boolean defaultProcess = processName.equals("com.qebang.ui");
			if(defaultProcess){
                //当前应用的初始化				
			    initApp();
			}
		}
	}

  public static String getProcessName(Context cxt, int pid) {
       ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
       List<RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
       if (runningApps == null) {
           return null;
       }
       for (RunningAppProcessInfo procInfo : runningApps) {
           if (procInfo.pid == pid) {
               return procInfo.processName;
           }
       }
       return null;
   }
 

 




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值