关于android activity的层级理解

关于android activity的层级理解

学习acitivty绘制的时候看到了activity的层级结构,也学习了一下也算是稍微了解了activity的层级结构,通过博客和源码记录一下自己的学习

  • 先放一张网上找到的图,大致了解一下activity的层级关系和系统进程的关系,也感谢绘制图片的dalao这里写图片描述

    • 从上面图片可以看出activity的层级可以看出整个activty的层级其实分为->phoneWindow->DecorView(包含TitleView [例如actionbar,StatusBar等] 和contentView [我们自己编写的界面] )

    • 通常我们编写的界面代码在setContentView中,从Activity的源码可以看出,activity将其交给了window来完成,window是activity的一个成员变量,仅有一个实现类PhoneWindow,PhoneWindow

public void setContentView(@LayoutRes int layoutResID) {
     getWindow().setContentView(layoutResID);  //调用getWindow方法,返回mWindow
     initWindowDecorActionBar();
}
  • 来到PhoneWindow中,setContentView代码如下
@Override
public void setContentView(int layoutResID) {
    // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window
    // decor, when theme attributes and the like are crystalized. Do not check the feature
    // before this happens.
    if (mContentParent == null) { 
        installDecor();
    } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
        mContentParent.removeAllViews();
    }

    if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
        final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
                getContext());
        transitionTo(newScene);
    } else {
        mLayoutInflater.inflate(layoutResID, mContentParent); 
    }
    final Callback cb = getCallback();
    if (cb != null && !isDestroyed()) {
        cb.onContentChanged();
    }
}
  • 首先会对mContentParent进行判定,如果为空则进行installDecor()操作,这个操作其实是进行mDecor的初始化,即DecorView,源码如下
private void installDecor() {
    if (mDecor == null) {
        mDecor = generateDecor(); 
        ...
    }
    if (mContentParent == null) {
        mContentParent = generateLayout(mDecor); 
        ...
        } 
    }
}

DecorView中存在着界面布局信息,从这里可以看出他是mContentParent的父类,也是存在于PhoneWindow中的一个成员变量。如果在viewTree中来看,DecorView是其根节点,viewRoot负责管理viewTree。从上面图也可以看出,ViewRoot这个类在android的UI结构中扮演的是一个中间者的角色,连接的是PhoneWindow跟WindowManagerService,每创建一个phoneWindow,便会创建一个相应的viewRoot进行链接。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值