前言:
前面的准备工作终于完成差不多了,长舒一口气,看下服务的注册。
1,native客户端
surfaceflinger是android系统中和图形相关的进程,由init进程通过解析init.rc文件创建,对应的文件目录
是frameworks/native/services/surfaceflinger。
init.rc启动surfaceflinger配置如下,
service surfaceflinger /system/bin/surfaceflinger
class core
user system
group graphics drmrpc
onrestart restart zygote
writepid /dev/cpuset/system-background/tasks
main_surfaceflinger.cpp的入口mian方法如下,
int main(int, char**) {
ProcessState::self()->setThreadPoolMaxThreadCount(4);//设置线程池大小
sp<ProcessState> ps(ProcessState::self());//获取ProcessState对象
ps->startThreadPool();//启动线程池
//获取SurfaceFlinger对象
sp<SurfaceFlinger> flinger = DisplayUtils::getInstance()->getSFInstance();
//设置进程优先级
setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY);
set_sched_policy(0, SP_FOREGROUND);
flinger->init();//SurfaceFlinger初始化
sp<IServiceManager> sm(defaultServiceManager());//获取IserviceManager对象
sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false);//添加服务
flinger->run();
return 0;
}
本章主要论述服务的添加,因此直接看addService方法。
SurfaceFlinger.h的SurfaceFlinger定义如下,
class SurfaceFlinger : public BnSurfaceComposer,
private IBinder::DeathRecipient,
private HWComposer::EventHandler
SurfaceFlinger继承于Ibinder。addService方法是通过跨进程调用,运行于系统的binder进程中。
IServiceManager.cpp的内部类BpServiceManager的addService方法如下,
virtual status_t addService(const String16& name, const sp&l