1. AttachInfo为View 里的一个静态内部类
看它的构造函数, 它关联了window, windowsession, viewrootImpl, windowToken, display, handler等元素
2. 关于ViewRootImpl
在View中 和 PhoneWindow中都可以得到这个对象
ViewRootImpl的setView()方法, 只会在第一次有用, 后续如果mView已经不为空了, 那么这个方法将什么都不做.
3. Choreographer 这个类的作用
关于这个类有个博文:http://www.jianshu.com/p/6f2043570de4
学到一个开源项目 TinyDancer 可以检查帧率.
先看注释, CP(Choreographer)的作用是为了协调输入, 动画, 绘制(渲染)三者的关系.
每个线程一个Choreographer对象.
先看一个内部handler子类: FrameHandler 一个标准的Handler类, 处理三种事件:
MSG_DO_FRAME
MSG_DO_SCHEDULE_VSYNC
MSG_DO_SCHEDULE_CALLBACK
-----以上这三个消息是干啥的?
内部类FrameDisplayEventReceiver 继承自DisplayEventReceiver , 这里又延伸出一个重要的类DisplayEventReceiver.
简单来说FrameDisplayEventReceiver实例被native层的vsync信号触发onVsync()方法调用
创建了包含4个CallbackQueue元素的数组, 分别对应: input, animation , traversal, commit 四种类型, 前三种就不说了. 最后一个commit的逻辑是这样的:
4.DisplayEventReceiver类相关
public void onVsync(long timestampNanos, int builtInDisplayId, int frame) 被native层调用dispatchVsync()
另外一个hotPlug事件是干什么的?