2017/10/22学习笔记

来源:互联网 发布:mac桌面图标怎么靠左 编辑:程序博客网 时间:2024/05/29 18:24

首先恭喜WE

1.ViewRootImpl创建的时还会创建一个Choreographer,以及一个surface


关于Choreographer:可以理解成一个事件处理器,内部主要有三大部分,FrameHandler,callBackQueque,Receiver,那么它对事件的处理过程大概为:首先它会通过一些方法获取到surfaceFlinger的相关fd,并将它们交给Looper监听,当fd有I/O操作的时候唤醒loop,触发onVSync事件,调用handler将消息传递到消息队列,最终调用handecallback方法,处理上层要做的逻辑,不直接调用onVSync的callBack是因为有可能无法再16毫秒内完成该事件。Choreographer内部的callBack包含三个类型,动画相关,用户输入,绘制,在这里说下他的绘制方法是通过回调调用我们ViewRootImpl中的performTraversals()方法来触发View的三大绘制流程。


关于surface,surface基本是跟ViewRootImpl同时创建的,它是由WindowManagerService创建的,首先创建的是一个surfaceControl,WMS只能控制surface的创建销毁透明度等,并不能修改具体内容,具体内容是通过View的canvas的draw方法进行绘制的,surfaceControl创建完成后会生一个一个surface对象会传给ViewRootImpl,这样我们的View就可以通过一个接口方法获取到我们的surface,在它的一个buffer中进行会制操作,再把buffer传递个surfaceFlinger完成最后的绘制操作。


windowState是我们WindowManagerServie和ViewRootImpl之间的代表,可以监听我们的聚焦事件以及负责我们的Window动画。

原创粉丝点击