Android UI绘制流程解析

目录

写在前面

一、UI绘制流程及原理

二、View的绘制流程

三、UI绘制详细步骤


写在前面

今天这篇文章其实是我的一篇学习笔记哈,整体写的比较简单,为了日后复习用,我就把它放在了博客上,勿喷!谢谢!

一、UI绘制流程及原理

问题:View是如何被添加到屏幕窗口上的

  • 创建顶层布局容器DecorView
  • 在顶层布局中加载基础布局ViewGroup
  • 将ContentView添加到基础布局中的FrameLayout中

源码分析:自定义测试入口类继承自Activity

public class TestActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_address_layout);
    }
}

Activity:



The only existing implementation of this abstract class is android.view.PhoneWindow, which you should instantiate when needing a Window.   这里意思是它是一个抽象类,并且具有唯一的实现类PhoneWindow。




generateLayout根据系统主题的属性通过requestFeature()和setFlags()进行一系列调用。接着是进行解析窗口View,根据feature的值对layoutResource进行不同的赋值操作,初始化好layoutResource之后,通过


将layoutResource进行解析创建了一个root对象,然后将root对象添加到DecorView里面,然后重新回到上面去:

得到contentParent之后,最后将它进行返回。

总结:

接着会调用:mLayoutInflater.inflate(layoutResID, mContentParent); 将我们在activity中设置的布局资源通过xml解析添加到frameLayout中。

二、View的绘制流程

首先来看这张图,总结了View的绘制流程:

源码分析:

ActivityThread:--->handleMessage()--->LAUNCH_ACTIVITY



此时会回调Activity生命周期的onResume()方法。



接着去WindowManagerImpl中找addView()方法:









三、UI绘制详细步骤

同样的,首先来看下面这张图:

接着来看测量,下面是具体的源码跟踪:







查看FrameLayout的onMesure()方法,因为DecorView是继承自FrameLayout:

布局:

绘制:

最后是测量布局绘制整个的流程总结:

OK,这篇笔记就到这里了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值