Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如 onKeyEvent, onTouchEvent等。 并维护应用程序的生命周期。Activity本身是个庞大的载体,可以理解成是应用程序的载体,如果木有Activity,android应用将无法运 行。也可以理解成 android应用程序的入口。Acivity的实例对象由系统维护。系统服务ActivityManager负责维护Activity的实例对象,并根 据运行状态维护其状态信息。

当我们调用Acitivity的 setContentView方法的时候实际上是调用的Window对象的setContentView方法,所以我们可以看出Activity中关于界 面的绘制实际上全是交给Window对象来做的。绘制类图的话,可以看出Activity聚合了一个Window对象。

在该方法中,首先创建一个DecorView,DecorView是一个扩张FrameLayout的类,是所有窗口的根View。我们在Activity中调用的setConctentView就是放到DecorView中了。这是我们类图的聚合关系如下:

Activity—>Window—>DecorView

Activity创建后系统会调用其attach方法,将其添加到ActivityThread当中,在attach方法中创建了一个window对象。window对象是一个抽象类。要注意window对象创建时并木有创建 Decor对象。用户在Activity中调用setContentView,然后调用window的setContentView,这时会检查 DecorView是否存在,如果不存在则创建DecorView对象,然后把用户自己的View 添加到DecorView中。

在ActivityThread当中调用wm.addView(decor, l);把它加入到window manager proxy的mViews中,同时为这个decor view创建一个ViewRoot,ViewRoot负责协调decorview与windowmanager直接绘图、事件处理。说简单点就是 DecorView是客户端所有view的根,window manager proxy为这个decorview创建一个ViewRoot和Window manager service打交道

我们可以去看看DecorView的实现,它是PhoneWindow的一个内部类。实现很简单,它默认会包含一个灰色的标题栏,然后在标题栏下边会包含一个空白区域用来当用户调用setContentView的时候放置用户View,并传 递事件。

转载自
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0322/1055.html

更多相关文章

  1. 类和 Json对象
  2. Android(安卓)Wifi模块分析(三)
  3. Android中dispatchDraw分析
  4. android用户界面之按钮(Button)教程实例汇
  5. Android四大基本组件介绍与生命周期
  6. Android之应用程序基础
  7. Android(安卓)Service AIDL
  8. Android调用天气预报的WebService简单例子
  9. android用户界面-组件Widget-地图视图MapView

随机推荐

  1. activity-alias的使用
  2. Android学习笔记-ProgressBar和ListView
  3. android 随手记 读写文件的几种方式
  4. adb.exe无法运行,提示0xc000007b错误
  5. Android(安卓)ApiDemos示例解析(17):App->
  6. Android反编译工具apktool
  7. Android悬浮窗用法总结
  8. 三种自定义漂亮的Android(安卓)SeekBar的
  9. Android(安卓)ComponentName用法
  10. eclipse,adt和android SDK安装