1.1.1 SurfaceComposerClient
图 11?28 每个应用程序在SurfaceFlinger中都对应一个Client
SurfaceFlinger运行于SystemServer这一系统进程中,需要UI界面显示的应用程序则通过binder服务与它进行跨进程通信。在音频系统的学习中,每一个AudioTrack在AudioFlinger中都可以找到一个对应的Track实现。这种设计方式同样适用于显示系统,即任何有UI界面的程序都在SurfaceFlinger中有且仅有一个Client实例。
Client这个类名并没有完全表达出它的含义,因为在Android系统的很多其它地方你都可以找到同名的类。应用程序与SurfaceFlinger间的接口是ISurfaceComposerClient,Client的父类是BnSurfaceComposerClient,它是这一接口的本地端实现。
/*frameworks/native/include/gui/ISurfaceComposerClient.h*/
class ISurfaceComposerClient : public IInterface
{ …
virtual sp<ISurface>createSurface( surface_data_t* data, const String8& name, DisplayIDdisplay,
uint32_t w,uint32_t h, PixelFormat format, uint32_t flags) = 0;
virtual status_t destroySurface(SurfaceID sid) = 0;
};