本讲是android camera native framework专题的第7讲,我们介绍cameraserver进程启动流程概述。
更多资源:
资源 | 描述 |
---|---|
在线课程 | |
知识星球 | 星球名称:深入浅出android camera 星球id: 17296815 |
极客笔记圈 |
sigpipe信号
在tcp通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据tcp协议的规定,会收到一个rst响应报文,若再往这个服务器发送数据时,系统会发出一个sigpipe信号给进程,告诉进程这个连接已经断开了,不能再写入数据。
该信号的缺省行为是终止进程,因此进程必须捕获它以免不情愿的被终止。
若不想退出可以把 sigpipe设为sig_ign。
配置5个线程来处理hidl调用
执行:
ps -t -p 11657
输出:
注册media.camera服务
onfirstref流程
new cameraservice后赋值给sp指针:
因此,调用完cameraservice构造函数后,会继续调用cameraservice::onfirstref。
onfirstref会完成7件事情:
void cameraservice::onfirstref()
{
alogi("cameraservice process starting");
bncameraservice::onfirstref();
// update battery life tracking if service is restarting
batterynotifier& notifier(batterynotifier::getinstance());
notifier.noteresetcamera();
notifier.noteresetflashlight();
status_t res = invalid_operation;
res = enumerateproviders();
if (res == ok) {
minitialized = true;
}
muidpolicy = new uidpolicy(this);
muidpolicy->registerself();
msensorprivacypolicy = new sensorprivacypolicy(this);
msensorprivacypolicy->registerself();
minjectionstatuslistener = new injectionstatuslistener(this);
mappops.setcameraaudiorestriction(maudiorestriction);
sp hcs = hidlcameraservice::getinstance(this);
if (hcs->registerasservice() != android::ok) {
aloge("%s: failed to register default android.frameworks.cameraservice.service@1.0",
__function__);
}
// this needs to be last call in this function, so that it's as close to
// servicemanager::addservice() as possible.
cameraserviceproxywrapper::pingcameraserviceproxy();
alogi("cameraservice pinged cameraservice proxy");
}
流程如下: