美文网首页
Activity视图加载

Activity视图加载

作者: 二旬一月 | 来源:发表于2020-05-29 02:38 被阅读0次

    前言

        作为一个工作了三年的android程序员,突入起来的觉得自己一直都是浑浑噩噩,开发过程中经常都是用到什么去查什么,这样日积月累也算是积累了一点经验,可这种所谓的经验近来让我觉得越来越没有安全感。开发中经常都是开发工具提示着撸代码,或者复制粘贴,对于原理和更深入一点的东西一知半解,或者根本不清楚,也觉得不会的东西越来越多,是时候恶补一下了。

    混子也得知道的

    上图比较形象

    activity构成

    需要记住的几个点

    1. Window是一个抽象类,提供了绘制窗口的一组通用API

    2. PhoneWindow是Window的具体实现类,并且该类包含了一个DecorView对象,DecorView是所有应用窗口,也就是Activity界面的根view。

    3. DecorView 是FrameLayout的子类,是对FrameLayout的功能的修饰。

    跟着源码看一看是怎么回事儿,帮助理解和记忆。

    1.从Activity的setContentView方法开始,点进去会看到Activity源码中的setContentView方法

    说明:这里做了两件事情:

        调用了Window的setContentView方法,我们知道PhoneWindow是Window的唯一实现类,所以这里需要去phonewindow中查看setContentView方法都做了些什么。

        初始化Decor的ActionBar

    2. 查看PhoneWindow的setContentView方法

    说明:这里重点的是 installDecor()方法,同时将我们传入的布局资源id加载到一个mContentParent中,所以继续往里看,这个方法干了什么,这个mContentParent是什么。

    3、installDecor()方法查看

    说明:这里我们可以看到mContentParent是怎么来的,首先是通过generateDecor(-1)这个方法创建一个DecorView,然后将它作为参数传递到generateLayout()方法中去,就得到了mContentParent。那就需要在往下看,这两个方法都做了什么。

    4、generateDecor方法和generateLayout方法

    generateDecor方法中我们可以看到,他最后就是返回了一个DecorView,重点在generateLayout方法

    通过源码我们可以看到,generateLayout方法分为两个部分,前面的是在根据各种设置配置各种属性,加载过程来说后半部分比较重要

    说明:这样就比较清楚了,在activity中setContentView方法事实上就是将我们自己创建的布局文件放到了DecorView中的content部分,最开始的结构图中的结构和资源文件为什么那样对应也就清楚了。

    总结

    第一次写,很生硬,算是试水,写完才发现,编辑模式除了富文本,还有markdown。希望以后自己坚持做输出,让自己能在表达上有多进步,也能帮助自己加深理解和记忆,当然也希望能对看到的人有所帮助。

    坚持!坚持!坚持!立个flag。

    途中使用到的图片:https://www.jianshu.com/p/0b99db3b8ed8

    学习的视频网址:https://www.bilibili.com/video/BV1xE411j7AB

    相关文章

      网友评论

          本文标题:Activity视图加载

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