多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
MS是一个可执行程序,入口函数是main,代码如下所示: **Main_MediaServer.cpp** ~~~ int main(int argc, char** argv) { //①获得一个ProcessState实例 sp<ProcessState>proc(ProcessState::self()); //②MS作为ServiceManager的客户端,需要向ServiceManger注册服务 //调用defaultServiceManager,得到一个IServiceManager。 sp<IServiceManager>sm = defaultServiceManager(); //初始化音频系统的AudioFlinger服务 AudioFlinger::instantiate(); //③多媒体系统的MediaPlayer服务,我们将以它作为主切入点 MediaPlayerService::instantiate(); //CameraService服务 CameraService::instantiate(); //音频系统的AudioPolicy服务 AudioPolicyService::instantiate(); //④根据名称来推断,难道是要创建一个线程池吗? ProcessState::self()->startThreadPool(); //⑤下面的操作是要将自己加入到刚才的线程池中吗? IPCThreadState::self()->joinThreadPool(); } ~~~ 上面的代码中,确定了5个关键点,让我们通过对这5个关键点逐一进行深入分析,来认识和理解Binder。