美文网首页
布局优化一,setContentView源码浅析

布局优化一,setContentView源码浅析

作者: android_小龙 | 来源:发表于2021-05-31 10:09 被阅读0次

大多数Android开发都是通过xml文件编辑Android页面布局的,而最终通过activity的setContentView()方法绑定.下面来走一下源码的流程

@Override
public void setContentView(@LayoutRes int layoutResID) {
getDelegate().setContentView(layoutResID);
}
往下走


微信图片_第二步.png

发现是一个抽象方法,点击左边的绿色圆点和向下箭头,可以调转到具体的实现


微信图片_第三步.png
发现了熟悉的LayoutInflater,继续查看inflate方法
微信图片_第四步.png
继续走
微信图片_第五步.png
这里出现了XmlResourceParser对象,估计是解析xml用的,继续走inflate方法
微信图片_第六步.png

在这里发现了createViewFromTag()这个函数,注释还说明了返回的view就是xml里找到的view,跟进去看看


微信图片_第七步.png
继续走
微信图片_第八步.png
在这里看到,首先回去尝试创建View tryCreateView(),在view为null的情况下,又去createView().先看看try里面做了什么
微信图片_第九步.png
这里发现了mFactory2和mFactory,有什么作用?先不管,下面的mPrivateFactory跟了源码发现是解析fragment标签用的
再去看看第二个createView
微信图片_第十一步.png
这个方法的代码有点多,能引起我的注意的Class.forName()和紧跟着的代码,是不就是反射么?接着看代码
微信图片_第十二步.png
看到view=constructor.newInstance();并return算是走完了流程.

回顾流程,简单总结步骤,setContentView调用首先走到LayoutInflater.inflate(),通过XmlResourceParser去解析xml文件,获取到对应的布局后调用createViewFromTag(),显示判断是否设置了factory2和factory,没有的话就调用createView通过反射的方式创建View并返回.
整个流程其实可以简单的分为2个步骤,第一是解析xml文件,这是一个IO读取的过程.另外一个是发射,一般反射创建对象要比直接new一个对象慢2,3倍,所以布局优化可以从这2个方面着手.

相关文章

网友评论

      本文标题:布局优化一,setContentView源码浅析

      本文链接:https://www.haomeiwen.com/subject/mnpvsltx.html