基于 Android 源码 5.1 分析
把布局添加进 DecorView
1 |
|
小结
- 创建 Window 抽象类的子类 PhoneWindow 类的实例对象;
- 为 PhoneWindow 类对象设置 WindowManager 对象;
- 为 PhoneWindow 类对象创建 DecorView 对象;
- 为 DecorView 类对象中的 content 增加 Activity 中的布局文件;
执行绘制三大步前的准备
1 | //源码 1 |
1 | //源码 2 |
1 | //源码 3 |
1 | //位于 ViewRootlmpl |
1 | //位于 ViewRootlmpl |
1 | //位于 ViewRootlmpl |
1 | //位于 ViewRootlmpl |
1 | //源码 8 |
1 | //源码 9 |
源码流程总结
- 把 DecorView 对象实例装进 WindowManger 里面;
- WindowManager 再把 DecorView 对象实例装进到 ViewRootImpl 里面;
- ViewRootImpl 对象通过 Handler 向主线程发送信息,通知 doTraversal() –> performTraversals() 开始执行绘制的三大步;
绘制前的准备
ViewRootImpl 对象中接收各种的变化(如来自 WMS 的窗口属性变化、来自控件树的尺寸变化、重绘请求等都会引发 performTraversals() 的调用)并且在 ViewRootImpl 的对象中完成;