Choreographer学习记录

 分类:Android, Java 阅读 (888)
5月 202020
 
一、官方介绍

Choreographer是用于协调动画、输入和绘图的时间的。

Choreographer从显示子系统接收时间脉冲(比如垂直同步),然后安排下一个显示帧渲染工作。

应用通常通过动画框架和视图层次结构的高级抽象方法与choreographer进行交互。下面是一些可以通过高级api可以做的操作:

使用android.animation.ValueAnimator#start

未完……

二、Choreographer可以协调的操作类型

1. CALLBACK_INPUT = 0

输入回调,最先执行的,优先级比较高

2. CALLBACK_ANIMATION = 1

动画回调,在traversals之前运行

3. CALLBACK_TRAVERSAL = 2;

遍历回调,处理layout和draw,在所有的异步信息处理之后运行。

4. CALLBACK_COMMIT = 3;

处理frame的post-draw操作。在traversal操作完成后运行。

三、Choreographer是如何管理各种回调的

是由一个CallbackRecord组成的链表来记录要执行的各种回调的

是由一个CallbackQueue数组来管理这些链表的(添加、删除),每一种回调类型一个CallbackQueue

mHead是第一个CallbackRecord,执行时间最近的一个

为什么要重新写一个CallbackQueue?

因为这个队列使用的很频繁,所以自己封装一个轻量级的Queue

四、Choreographer是如何与上层Api交互的

如上图:上层框架创建Choreographer的实例,并循环进行调用

五、mCallbackPool对象的使用(性能优化)

其中obtainCallbackLocked是用于试图新建一个CallbackRecord,recycleCallbackLocked是用于回收一个CallbackRecord

重复利用mCallbackPool,尽量避免重复创建CallbackRecord

六、为什么不用Handler管理?

因为它还有自己其他的业务逻辑,比如CallbackQueue。

 

打赏
 Posted by on 2020-05-20

Sorry, the comment form is closed at this time.