Activity UI显示的学习总结

转自http://blog.csdn.net/gemmem/article/details/7315526

大家都知道我们使用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,将绘制的内容渲染到屏幕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值