Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如onKeyEvent, onTouchEvent等。 并维护应用程序的生命周期。Activity本身是个庞大的载体,可以理解成是应用程序的载体,如果木有Activity,android应用将无法运行。ActivityManagerService负责维护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,并传递事件。


更多相关文章

  1. Android(安卓)SharedPreferences用法及程序共享机制
  2. TextView使用android:autoLink="web"但又不打算跳转外部浏览器
  3. [Android] Android应用插件式开发解决方法
  4. 【Android(安卓)界面效果10】Android中View,ViewGroup,Window之
  5. Firemonkey扩展增强:Android(安卓)浏览器支持Input file标签上传
  6. Android之RxJava(一)
  7. Android(安卓)进阶——持久化存储序列化方案Serializable和IPC及
  8. Android(安卓)的性能工具用法 II-内存分析工具I
  9. Android(安卓)- Activity 与 Window 与 View 之间的关系

随机推荐

  1. MySQL 选择合适的存储引擎
  2. Mysql脏页flush及收缩表空间原理解析
  3. Mysql读写分离过期常用解决方案
  4. Mysql误删数据解决方案及kill语句原理
  5. mysql常用备份命令和shell备份脚本分享
  6. MySQL 数据查重、去重的实现语句
  7. Mysql复制表三种实现方法及grant解析
  8. Mysql临时表及分区表区别详解
  9. MySQL 如何修改root用户的密码
  10. 深入分析mysql为什么不推荐使用uuid或者