DecorView添加进window的流程分析

本文深入探讨了DecorView如何从Activity的setContentView开始,逐步被添加到window的过程。从handleLaunchActivity的performLaunchActivity方法启动Activity,到handleResumeActivity中通过WindowManager的addView方法将DecorView加入window,再到WindowManagerImpl的内部实现,以及ViewRootImpl的performTraversals方法完成View的测量、布局和绘制。整个流程清晰地揭示了DecorView在window中的生命周期和展示机制。
摘要由CSDN通过智能技术生成

我们知道一个DecorView的创建是在Activity中调用setContentView后,一步一步实现的。那么,创建好了DecorView后,我们是怎么将它加入进window呢?

handleLaunchActivity中的performLaunActivity方法

调用startActivity方法时,最终会调用ActivityThread的handleLaunchActivity方法创建Activity。在该方法中会调用performLaunchActivity方法,创建一个Activity。

private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) {
         ......
        Activity a = performLaunchActivity(r, customIntent); 
        .......
    }

在performLaunchActivity方法中,会调用attach方法实例化一个PhoneWindow。

final void attach(Context context, ActivityThread aThread,
            Instrumentation instr, IBinder token, int ident,
    
        mWindow = new PhoneWindow(this);
        mWindow.setCallback(this);

attach方法之后会调用callActivityOnCreate方法,进而调用Activity的onCreate方法。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值