Android开发-Activity中Window和View的创建过程分析 Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析 Android应用程序窗口(Activity)的视图对象(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方法,测量和布局




猜你喜欢

转载自blog.csdn.net/qq_19694479/article/details/80567920