Android Project Butter分析

为基准,将其划分成

和Synchronization Barrier(参照Looper.java的postSyncBarrier函数)。其实现非常巧妙,这部分内容就留给读者自己理解并欣赏了。

相比SurfaceFlinger,Choreographer是Android 4.1中的新事物,下面将通过一个实例来简单介绍Choreographer的工作原理。

假如UI中有一个控件invalidate了,那么它将触发ViewRootImpl的invalidate函数,该函数将最终调用ViewRootImpl的scheduleTraversals。其代码如图9所示:

图10 Choreographer doFrame函数片段

对ViewRootImpl来说,其TRAVERSAL回调对应的处理对象,就是前面介绍的mTraversalRunnable,它的代码很简单,如图11所示:

图11 mTraversalRunnable的实现

doTraversal内部实现和Android 4.0版本一致。故相比于4.0来说,4.1只是把doTraversal调用位置放到VSYNC中断处理中了。

通过上边的介绍,可知Choreographer确实做到了对绘制工作的统一安排,不愧是个长于统筹安排的“舞蹈编导”。

三总结

本文通过对Android Project Butter的分析,向读者介绍了VSYNC原理以及Android Display系统的实现。除了VSYNC外,Project Butter还包括其他一些细节的改进,例如避免重叠区域的绘制等。

简言之,Project Butter从本质上解决了Android UI不流畅的问题,而且从Google I/O给出的视频来看,,其效果相当不错。但实际上它对硬件配置还是有一定要求的。因为VSYNC中断处理的线程优先级一定要高,否则EventThread接收到VSYNC中断,却不能及时去处理,那就丧失同步的意义了。所以,笔者估计目前将有一大批单核甚至双核机器无法尝到Jelly Bean了。

图1到图4,请参考2012 Google I/O大会的宣传资料

关于SurfaceFlinger的代码详解,请参考《深入理解Android 卷I》第8章

关于MessageQueue及Handler,请参考《深入理解Android 卷2》第2章以及《深入理解Android 卷I》第5章

只是需要垮上后座的勇气和一颗想走即走的心,

Android Project Butter分析

相关文章:

你感兴趣的文章:

标签云: