美文网首页
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