大家都知道我们使用Activity来完成Android的UI编程。我们需要在Activity的OnCreate函数中调用setContentView( )来设置自己的UI布局。但这只是Android的UI显示系统的冰山一角,其实为了将这些UI元素显示到屏幕,Android实现了一套复杂的显示系统,下面是我对Activity显示UI的一些理解,纰漏之处还请大家指正:

1. Activity的顶层View是DecorView, 而我们在onCreate函数中通过setContentView设置的View只不过是这个DecorView的一部分罢了。DecorView是一个FrameLayout类型的ViewGroup。

2. Activity包含一个Window(类型为PoneWindow)和一个WindowManager(类型为LocalWindowManager)对象。这两个对象将控制Activity的显示。

3. LocalWindowManager使用了WindowManagerImpl作为最最终处理对象(设计模式中的代理模式),这个WindowManagerImpl中有一个ViewRoot对象。

4. ViewRoot实现了ViewParent接口,它有2个重要的成员,一个是mView,它指向Activity的顶层UI单元的DecorView,另外一个是mSurface,这个mSurface包含了一个Canvas。除此之外,ViewRoot还通过binder机制和WindowManagerService进行跨进程交互。

5. ViewRoot是一个Handler,可以处理Handler的消息,Activity的显示就是由ViewRoot在它的performTraversals函数中完成的。

6. 整个Activity的绘图流程就是从mSurface中lock一块Canvas,然后交给mView(DecorView)去draw整个视图层次(包括mView的所有子view)。最后调用unlockCanvasAndPost释放这块Canvas,将绘制的内容渲染到屏幕。

更多相关文章

  1. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互
  2. android 使用SharedPreferences保存对象
  3. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态
  4. Android 开发中Parcel存储类型和数据容器
  5. 从零学Android(八)、Android资源类型之Drawable资源
  6. Android 内功心法(番外)——写在设计模式前,面对对象编程基础
  7. Android中切换屏幕方向时Activity生命周期函数执行情况分析
  8. Android 使用Parcelable传递对象

随机推荐

  1. android 使用Intent传递数据之返回结果
  2. java/android 使用swig编译c/c++ 代码类
  3. Android(安卓)Activity总结
  4. Android零碎知识
  5. linux下eclipse启动android模拟器出现PAN
  6. 常用的Js调Android方法,以及Android原生传
  7. Android(安卓)Studio中Android(安卓)Devi
  8. [android] android下创建一个sqlite数据
  9. Service与Android系统实现(1)-- 应用程序里
  10. Android(安卓)Studio 首次创建工程下载Gr