面对这么复杂一个Android显示系统,如何入手呢 根据以前的经验,不管它有多么复杂,其功能不就是以下三步曲吗?
1)显示系统的创建及初始化
2)画图
3)销毁
哪我的分析就从显示系统的创建及初始化开始吧!由于小弟对Java没有什么研究兴趣,所有重点就分析Native部分。当然Native的入口就在android_view_Surface.cpp中,此文件主要包含以下两部分给Java层调用:
1)gSurfaceSessionMethods: 操作SurfaceSession的方法
2)gSurfaceMethods:操作Surface的方法
2.1.1 SurfaceSession_init
其功能如下:
1)创建SurfaceComposerClient对象
2)调用SurfaceComposerClient::onFirstRef方法
现在已经进入到SurfaceComposerClient的地盘,根据其名字含义,它应该是一个进行Surface合成的客户端,通过它发命令给SurfaceFlinger来进行需要的操作。其初始化流程如下图所示:

为了方便后面的理解,先看看SurfaceComposerClient中有些什么宝贝来完成这个任务。在其中定义了如下几个类:
一看到名字为Service,应该是用于从SurfaceFlinger中获取Service以建立连接关系<它是一个单实例,一个进程有且只有一个实例对象>,然后供后面进行相关的操作。其构造函数代码如下:
由此可见,ComposerService主要是获取SurfaceFlinger服务、获取在SurfaceFlinger::readyToRun中创建的共享内存块及其基地址。在Client中,谁要想与SurfaceFlinger通信,需要通过接口getComposerService来获取此BpSurfaceComposer。
此ComposerService是在调用ComposerService::getInstance时进行有且只有一个的实例化,因为前面讲过,它是一个单实例。
它也是一个单实例,管理并发送每个layer的ComposerState。其定义如下:
把上面的comments看完就明白了,Composer管理每个SurfaceComposerClient中的每一个Surface的状态,并记录在ComposerState的layer_state_t中,然后调用者可以调用其closeGlobalTransaction方法把这些mStates发送给SurfaceFlinger处理(处理函数为:SurfaceFlinger::setTransactionState)。
谁来调用它的方法设置层的属性及发送mStates呢 -----答案是由SurfaceComposerClient来调用。