一、Activity的Window创建
(1)Activity创建
最终由ActivityThread中的performLaunchActivity()来完成。此方法通过类加载器ClassLoader创建Activity实例,调用attach关联上下文,并创建Window。
Window创建是通过PolicyManager的makeNewWindow实现。
由于Activity实现了Window的CallBack接口,所以Window改变时会回调Activity方法。(onAttachedToWindow/onDetachedFromWindow/dispatchTouchEvent)
(2)Activity视图如何附属在Window上
其由setContentView方法提供
Activity视图实际上转交给了Window,而Window的具体实现是PhoneWindow。而PhoneWindow的setContentView实现如下:
(2.1)如果没有DecorView,创建它
(2.2)将View添加到DecorView的mContentParent中
(2.3)回调Activity的onContentChanged方法改变视图
(3)显示问题
onResume——》makeVisible() ——》DecorView真正完成添加和显示。之前只是添加。