android关于activity的组成

转载请注明出处 http://blog.csdn.net/u011453163/article/details/50683040

在移动开发中,无论是android还是ios,作为移动端,主要是将内容呈现给用户。android和ios的根本是相似的,都是以window的形式给用户展现界面。android以activity作为界面向用户展示信息。作为开发者,有必要了解activity到组成及其构建的过程。下面从源码中解析activity的组成。

首先,我们先看看activity的生命周期,只有知道它从哪里来去哪里,究其根源才能知道从什么地方开始。

这里写图片描述

关于生命周期这里不做详细解析,都是从onCreate()开始,因为这方法我们能重写,但是在这之前还有一步很关键的操作,就是attach()。如果你不信,从源码来验证一下。
众所周知,android中能作为界面的呈现给用户的是activity。但是这最主要的功臣不是它。activty要想呈现界面必须执行一个方法 setContentView(),传入一个View作为布局,那么我们就来看看这个方法到底是做了么。。。

这里写图片描述

是不是太简单了,就两行代码,从方法体的内容看。不难猜出第二行是初始化标题栏。
那么来看看getWindow().setContentView(layoutResID);
暂且先不看getWindow是什么先来看看setContentView(layoutResID);

这里写图片描述

依然什么都没有,只是一个抽象方法,而且这是一个Window,明显这是需要子类自己去实现的。所以getWindow自然获取的是Window的一个子类。
在来看看getWindow获取的一个什么样的window。

这里写图片描述

这里写图片描述

看到这里我们先来理理,首先我们给activity 设置一个view,但其实是个window设置一个view。

接下来我们来看看这个window的初始化,在那被初始化。

这里写图片描述

attach(),mWindow的初始化,所以证实在onCreate之前会先执行attach
而且这方法是final 的,不能被子类重写的。

mWindow初始化成一个PhoneWindow,注意一点,在不同的版本里 初始方式有差异,但最后都是初始化成Window类或其子类,之后我再来看看phoneWindow的setContentView()方法到底做了些什么。。。。

这里写图片描述

去掉来一些代码,留下的是关键的代码。

方法里会先判断mContentParent是否为null,如果为null 会调用installDecor初始化,
不为null的话 会将我们的布局添加到mContentParent,mContentParent是一个ViewGroup,从这方法看,目的是将我们的布局添加mContentParent上。那么来看看mContentParent的初始化做了什么,它是具体是什么。进入installDecor()方法看看

这里写图片描述

可以看到mContentParent初始化时调用了generateLayout()方法 并且传入一个mDecor 而mDecor是通过generateDecor方法生成的,我们分别来看看都是些什么 都做了什么。
首先是mDecor是什么?

这里写图片描述

这里写图片描述

DecorView是 FrameLayout的子类,那么就明白啦, mDecor是一个FrameLayout,这是最顶层的View 这肯定是有特殊功能的FrameLayout 但是不管怎么样它都是FrameLayout 就有FrameLayout的所有功能 暂且将它当作一个FrameLayout 。
之后我们再来看看generateLayout()这个方法到底做了什么

这里写图片描述

这个方法内容有点多,留下了比较核心的代码,

从方法里可以看到这样的信息

1 根据不同的模式 获取不同的layouResource
2 通过layouResource生成一个View
3 给decor addView 将这个View添加进去
4 通过findViewById() 获取contentParent
5 返回contentParent

所以我们得到的mContentParent就是 contentParent

之后将我们自己的布局添加到mContentParent 上
所以activity就有了自己的界面,我们也就看到了我们自己的界面

这里说明一下layouResource,layouResource是系统自己的布局,有多种模式。以下是一个例子

这里写图片描述

很简单的布局 一个标题栏 一个内容区

关于activity的组成就讲到这里,以下用一张图总结一下activity的组成

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值