android源码分析之setcontentview如何将UI文件加载

在activity的oncreate方法中,都要setcontentview去设置一个布局文件,那我们由这里为起点开始研究之旅

进入到Activity如图1,找寻getWindow发现,window为一个抽象类,其唯一实现为PhoneWindow类如图2

《android源码分析之setcontentview如何将UI文件加载》 1

《android源码分析之setcontentview如何将UI文件加载》 2

一、关注圈出来的两个方法,如图3,第一个方法是系统的各种布局;第二个是自己写的方法布局,其中自己的写的xml经过解析,放入了LayoutParams

《android源码分析之setcontentview如何将UI文件加载》 3

图4的第一个方法为一些初始化,重点关注第二个方法,

《android源码分析之setcontentview如何将UI文件加载》 4

generatelayout方法中是一系列requestFeature方法,如图5

《android源码分析之setcontentview如何将UI文件加载》 5

《android源码分析之setcontentview如何将UI文件加载》 6

真正加载layout中布局的代码如图7

《android源码分析之setcontentview如何将UI文件加载》 7

二、将布局绘制到页面

在ActivityThread的handleMessage方法中,找到relauch的,进一步获得图8

《android源码分析之setcontentview如何将UI文件加载》 8

通过ClientTransactionHandler 中的scheduleTransaction(ClientTransaction transaction)这个方法,发送消息,ActivityThread的handleMessage()中处理消息,mTransactionExecutor.execute(transaction)

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

如下图发现 addView方法是接口ViewManager中的方法,肯定会有一个地方去实现他,就在ActivityThread中

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

ViewManager是个接口,我们要找getWindowManager()方法进去继续查找实现

《android源码分析之setcontentview如何将UI文件加载》

WindowManager也是个接口,继续查找

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

WindowManageImpl中的addView方法

《android源码分析之setcontentview如何将UI文件加载》

接近真相的时刻快到了,下图箭头标识方法,很可能就是我们想要的方法

《android源码分析之setcontentview如何将UI文件加载》

如下图是三个容器,装view、root、wparams

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》
《android源码分析之setcontentview如何将UI文件加载》

measure之后,进行布局的摆放,如下图

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

资源里所有的view依次全部轮循出来,然后每个去requestLayout

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

performLayout之后才进行performDraw

《android源码分析之setcontentview如何将UI文件加载》

《android源码分析之setcontentview如何将UI文件加载》

    原文作者:紫苑草
    原文地址: https://www.jianshu.com/p/1ae2fd0dca64
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞