Android进阶系列6-从DecorView开始的View绘制流程

本文详细解析了Android中从DecorView开始的View绘制流程,涉及ActivityThread的handleResumeActivity方法、WindowManagerImpl、ViewRootImpl的setView、requestLayout、scheduleLayout、doTraversal以及performTraversals等关键步骤,揭示了View如何从初始化到最终绘制到屏幕的全过程。
摘要由CSDN通过智能技术生成

前面的两篇文章Android进阶系列5—从LayoutInflater到setContentView的setContentViewAndroid进阶系列4—从LayoutInflater到setContentView的LayoutInflater讲述了从setContentView开始如何将布局文件添加到DecorView中,再如何利用LayoutInflater将xml文件解析成View树。在Android进阶系列0—View的工作流程:measure,layout,draw小结中,描述了View的绘制三步骤,其中提到:

View由ViewRoot完成三大流程。在ActivityThread中,当Activity对象被创建完毕后,DecorView会被添加到Window中,同时创建ViewRootImpl的对象,将其和DecorView关联。View的绘制流程由ViewRoot的performTraversals()方法调用performMeasure,performLayout,performDraw完成顶级View(即DecorView)的measure,layout,draw。

这段话当时直接摘抄自《Android开发艺术探索》,博主那时候对DecorView,ViewRoot等概念也不明白。但是有了这三篇文章做基础之后,博主觉得需要对View绘制到屏幕的流程探探究竟了。
很感谢从ViewRootImpl类分析View绘制的流程这篇文章,讲解了博主想学习的知识,啊哈哈!
By the way,为啥sdk source中的有些文件Google要隐藏呢?不能直接在AS中查看,有点不方便。
当Activity初始化 Window和将布局添加到PhoneWindow的内部类DecorView类之后,ActivityThread类会调用handleResumeActivity方法将顶层视图DecorView添加到PhoneWindow窗口(聪明的读者可以猜到,后面这又是一篇文章)。

handleResumeActivty()

ActivityThread类的handleResumeActivity方法如下所示:

final void handleResumeActivity(IBinder token,
            boolean clearHide, boolean isForward, boolean reallyResume) {
            ......
            if (r.window == null && !a.mFinished && willBeVisible) {
                //获得当前Activity的PhoneWindow对象
                r.window = r.activity.getWindow();
                //获得当前phoneWindow内部类DecorView对象
                View decor = r.window.getDecorView();
                //设置DecorView不可见
                decor.setVisibility(View.INVISIBLE);
                //获取WindowManagerImpl对象,WindowManager继承自ViewManager,WindowManagerImpl是WindowManager的实现类
                ViewManager wm = a.getWindowManager();
                WindowManager.LayoutParams</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值