今天经过学习和思考后,终于弄清了android中activity,window和view的关系。

本来打算附上一张完整的uml图的,结果因为自己还不会用画图工具,所以只能把提到的类画成图奉上,至于类与类之间的关系,就由文字叙述。


首先在我们启动一个activity的时候(startactivity())最终会调用到activity的一个成员函数attach(),这个函数会通过PolicyManager这个类实现一个IPolicy接口。


IPolicy接口实现了Policy这个类,在Policy这个类中,有一个很重要的将会被调用到的函数makenewwindow(Context),这个函数将会返回一个phonewindow对象。


phonewindow类是window类的子类,它在实例化的时候,会构造一个viewgroup对象,viewgroup类中有一个重要的成员函数是addview(view),该函数会在调用setcontentview()后被调用到,也就是说,view是通过addview()加载后才被显示在屏幕上。viewgroup类显然是继承自view类。


再简要说一下layoutinflator这个类,它主要是有一个重要的成员函数inflator(),该类通过加载一个布局文件,返回一个view对象。


现在说说三者之间的关系,其实通过上面对这些类的关系,以及从这些类的命名已经可以看出一些东西了,我用一个不是太恰当的比喻说明,一个画手在画画,他拥有一块画布和一支画笔,在这三者的关系中,activity就像是这个画手,他操控着一切,包括画笔和画布,而画布就是window,这只能画出各种图画的画笔则像viewgroup这个类(因为它有一个重要的函数addview()),那么view是什么呢?view是各种图画,如一座山,一条河,一只小鸟等各种具体的图画。


一起学习,有错误请指出。

更多相关文章

  1. 关于Linux Kernel and Android(安卓)休眠与唤醒
  2. Android应用程序窗口(Activity)窗口对象(Window)创建指南
  3. Android(安卓)NDK开发Crash错误定位
  4. Android(安卓)深入研究JNI
  5. Android--hw_get_module解析
  6. Android(安卓)java层和C层的相互调用
  7. Android新手轻松学知乎日报开发(三)封装简单的OkHttp
  8. Android(安卓)8.0 行为变更
  9. Android(安卓)Kotlin 开发踩坑之旅

随机推荐

  1. Android 读取app内json配置文件
  2. 定制一个Android的Launcher(Home)
  3. 让Android手机变得无所不能-几种很有创意
  4. 华清远见专家解读Android开发者成长之路
  5. android 如何完全卸载Android Studio
  6. Android开发学习笔记之 获得Android 可使
  7. 史上最强Android木马”现身
  8. Android面试系列文章2018之Android部分As
  9. 【Android 开发入门】Android设备监视器
  10. handle的用法