美文网首页
Activity、PhoneWindow以及DecorView的

Activity、PhoneWindow以及DecorView的

作者: 浩仔_Boy | 来源:发表于2021-01-28 10:54 被阅读0次

一、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;
    }
}

相关文章

网友评论

      本文标题:Activity、PhoneWindow以及DecorView的

      本文链接:https://www.haomeiwen.com/subject/ltbrzktx.html