ndleMessageTransaction处理事务
>> 有事务处理请求时,调用handleTransaction进行处理(getTransactionFlags)
>> 调用handleTransactionLocked
>> commitTransactionao提交事务
> handleMessageInvalidateia调用handlePageFlip绘制
> handleMessageRefresh合并和渲染
> 完成后,线程继续等待下一个invalidate消息
(以下是深入理解Android的讲解,源码为2.2)
> 处理事务
>> 有事务处理请求时,调用handleTransaction进行处理(getTransactionFlags)
>> 调用handleTransactionLocked
>> commitTransactionao提交事务
> handlePageFlip绘制(Layer从FrontBuffer中取得新数据,并生成一张OpenGL中的纹理。现在Layer准备好了数据,下一步开始进行绘制)
> handleRepaint对每一层进行重绘(显示层的onDraw函数,使用OpenGL)
> 绘制完图后,unlockClient释放之前占着FrontBuffer的索引,调用各个显示层的finishPageFlip函数
> postFrameBuffer调用DisplayHardware.cpp的flip函数,flipg调用eglSwapBuffers函数,以完成FrameBuffer的apgeFlip操作,之后混合后的图像就会传递到屏幕中显示
交互模块:
应用通过windowsmanager分配一个surface,需要分配显示空间在上面进行绘图,在图形绘制完成后需要推送到surfaceflinger进行合成显示。
surfaceflinger作为消费者,得到一个要合成的图形,在合成完毕后再将图形释放。
大概流程:
->bufferqueue.cpp(../native/libs/gui库)
-> composerService(单例模式)与SF建立bind连接
-> SurfaceComposerClinet.cpp调用createaSurfce创建surface,返回surfaceControl
-> 创建surface后在graphicBuffer.cpp(../native/libs/ui库)分配共享内存
-> 创建surface后,SF也对应一个layer,当上层layer调用刷新后,onFrameAvailable被调用,通知SF有layer更新
!!!因为初次接触,翻阅《深入理解Android》(2.2源码)以及其他的博客(Android6.0以上源码)很多地方还不理解,所以有不正确的地方还请指正。