关于安卓应用执行的内部机制分析

首先罗列一些相关的名词

ActivityManagerService-----它是管理所有应用的最高级api,作用主要有三个,(1)统一调度各应用的activity.(2)内存管理(3)进程管理。  每次启动一个activity都要在它里面的             processRecord成员变量里面添加信息

ProcessRecord-------有称数据进程类,每个应用对应一个进程(远程进程除外),每个进程就是由这个类来管理

List<ActivityRecord> activities--------这是ProcessRecord里面的成员变量,每次打开新的activity就会在这里面添加一个以便管理

ActivityRecord -------------里面主要是activity的一些信息,所在的进程,线程,是否处于启动状态等等

-------------------------------------以上是和startActivity()也就是启动一个活动的前期准备工作---------------------------

执行完 前期准备工作后会回调activiy的onCreate()方法,进而执行setContentView(),此时重点正式开始,一次为突破口来解析一些类的原理

Window---是一个抽象类,可以将其理解为一个载体,View必须在这个载体上才能展示出来

PhoneWindow---------Window的实现类,它里面主要有一个继承自FrameLayout的内部类DecorView,并将DecorView的实例作为窗口的主VIew

DecorView-----继承自FrameLayout,是PhoneWindow的内部类,如果说Window是画板,那么他就是画纸,布局文件就是画的内容,有addView()来显示需要展示的activity

ViewRoot---------他其实是一个Handler,主要进行SMS的Client端(也就是app端)和Server端(手机操作系统端)的通信,比如我要把一个应用关闭,需要通过ViewRoot发送信息给操作系统让他把AMS里面的ProcessRecord里面的ActiivtyRecord从activities里面删掉

=============

View-----所有的界面都是View,包括各种控件,各种layout

ViewGroup-----用来管理View的一个VIew的集合Layout就是ViewGroup,(一般布局文件中都会有很多子布局,并且可以设置子布局的样式等等)

执行流程总结

当执行到Activity里面的setContentView得时候,其实会调用Activity类里面的mWindow(PhoneWindow实例)的setContentView(),根据源码会发现,PhoneWindow里面有一个DecorView实例,PhoneWindow的setContentView()里面就是先用LayoutInflater取出一路传过来的.xml布局文件的View实例,再将这个View实例通过DecorView的addView()添加到DecroView里面,这样页面上就显示出了我们需要的结果。

参考资料:http://www.myexception.cn/android/1792465.html

http://www.cppblog.com/fwxjj/archive/2013/01/13/197231.html


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值