Activity、PhoneWindow以及DecorView的关系

一、Activity#setContentView中的xml文件是如何转化成View并显示到Activity中的

1.在setContentView里面,通过getWindow获得了当前activity的phoneWindow窗口;
2.调用的PhoneWindow中的setContentView,并在里面调用了mLayoutInflater.inflate(layoutResID, mContentParent)方法,
3.将xml的布局填充到DecorView上面,看源码里会有一个screen_simple的xml文件,其中又一个FrameLayout,我们的布局都是装载在这个Framelayout中,最终会回附加到DecorView上面

image.png

二、PhoneWindow是在什么时候创建的

PhoneWindow对象的创建是在Activity对象创建之后创建的,而Activity对象的创建在ActivityThread.performLaunchActivity()方法才完成创建的

public final class ActivityThread {
   private final Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
     ......
        Activity activity = null;

            activity = mInstrumentation.newActivity(
                    cl, component.getClassName(), r.intent);//创建Activity对象

          ......
            if (activity != null) {
                ContextImpl appContext = new ContextImpl();//创建Context对象
                   appContext.setOuterContext(activity);//在ContextImpl类中保存当前Activity对象,以便在ContextImpl能操作Activity组件。
                ......
                activity.attach(appContext, this, getInstrumentation(), r.token,
                        r.ident, app, r.intent, r.activityInfo, title, r.parent,
                        r.embeddedID, r.lastNonConfigurationInstance,
                        r.lastNonConfigurationChildInstances, config);


......
        return activity;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容