Android开发-Activity中Window和View的创建过程分析

Activity中Context的继承关系


参考资料:

Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

https://blog.csdn.net/luoshengyang/article/details/8223770

1.Activity中的Window对象是一个PhoneWindow对象

2.PhoneWindow持有DecorView对象,还有一个ViewGroup类型的mContentParent对象

3.PhoneWindow父类Window类持有一个LocalWindowManager对象,LocalWindowManager持有WindowManagerImpl对象,用于和WindowManager通信,LocalWindowManager是Window类的一个内部类

4.LocalWindowManager对象,会创建一个Display对象,用于保存当前Activity窗口的一个特性

5.Activity在创建Window的时候,会通过setCallBack将自己这只给Window,这样当Window有变动时,会回调Activity的方法,


参考资料:

Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

https://blog.csdn.net/luoshengyang/article/details/8245546

1.一个Activity的顶级View,DecorView是保存在PhoneWindow中的,因此Activity的setContentView实际上是调用PhoneWindow的setContentView,首先会创建DecorView,并且创建mContentParent对象,即找到id为content的View,然后判断是否需要显示或者隐藏TitleView,最后创建ContentView,并且添加到mContentParent中,,,第一步是在onCreate方法中完成

2.在handleResumeActivity方法中会获取Activity中的mWindowManager对象,是一个LocalWindowManager对象,并且调用mWindowManager的addView方法,

3.LocalWindowManager的addView方法实际上调用的WindowManagerImpl的addView方法,

4.在WindowManagerImpl的addView方法中,会创建ViewRoot对象,并且将ViewRoot对象,View对象,WindowManager.LayoutParam对象保存在相应数组中


Android应用程序窗口(Activity)添加到WindowManager过程

1.重要对象:IWindowSession,W,WindowState

2.IWindowSession一个应用程序只有一个对象,用于应用程序和WMS通信,ViewRoot的addView方法,实际调用的IWindowSession的相关方法

3.W类是WMS跟对应窗口通信的Binder对象,没有个Window都有一个W对象,W类是ViewRoot的内部类

4.每一个Window在WMS端都一个对应的WindowState对象,用于表示这个Window


Activity中View的测量布局过程:

1.Activity所对应的窗口在WMS端被激活以后,会调用ViewRoot的requestLayout方法,然后间接调用performTraversals方法,在这个方法中会判断mRequestLayout是否为真,如果为真,会调用measure和layout方法,测量和布局




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值