Actvity绘制流程

本文详细探讨了Android Activity的绘制流程,从setContentView()开始,经过PhoneWindow的创建,到handleResumeActivity的调用,进一步分析了WindowManager的设置与获取,最后进入ViewRootImpl进行布局的绘制。在onCreate()方法中,主要处理setContentView,而在handleResumeActivity中,利用WindowManager和ViewRootImpl完成了最终的绘制工作。
摘要由CSDN通过智能技术生成


本文的绘制流程也是基于之前的几篇文章的(同上基于API——15)
1. 安卓应用启动流程分析
2. ActivityThread启动页面分析
3. Activity创建流程分析
上片 Activity创建流程分析说到Activity已经创建了并通过Instrumentation调用了Activity的onCreate方法,那么接下来需要干的事情就很明显了吧,我们在onCreate 的时候一般就是通过setContentView()方法设置布局,设置之后呢,那不知道谁反正是绘制出来了,本文的目的就在于,紧接上文寻找Activity是通过哪些类渲染页面的

setContentView()

public void setContentView(int layoutResID) {
   
  // 各位大爷 真是基于api 15 的,高版本的 不一样的
  		//getWindow  获取到当前绑定的Window  window本身就是一套接口,我们看的是具体实现的地方,上文attach方法提到了
  		//创建的window是PhoneWindow  源码在Policy类里面,
        getWindow().setContentView(layoutResID);
        initActionBar();
    }

进入PhoneWindow

@Override
public void setContentView(int layoutResID) {
   
     if (mContentParent == null) {
   
         installDecor();
     } else {
   
         mContentParent.removeAllViews();
     }
     //这个逻辑已经不能再清晰了,最终我们写的View要添加到mContentParent中,他是一个ViewGroup
     mLayoutInflater.inflate(layoutResID, mContentParent);
     final Callback cb = getCallback();
     if (cb != null && !isDestroyed()) {
   
         cb.onContentChanged();
     }
   }

首先查看mContentParent 是如何创建的

private void installDecor() {
   
        if (mDecor == null) {
   
        // 这里就是直接new DecorView(getContext(), -1); new了一个DecorView
            mDecor = generateDecor();
            mDecor.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
            mDecor.setIsRootNamespace(true);
        }
        if (mContentParent == null) {
   
        //到这个方法才生成,下面进入查看
            mContentParent = generateLayout(mDecor);
            mTitleView = (TextView)findViewById(com.android.internal.R.id.title);
            if (mTitleView != null) {
   
                if ((getLocalFeatures() & (1 << FEATURE_NO_TITLE)) != 0) {
   
                    View titleContainer =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值