int main(int argc, char** argv)
{
//獲得service manager的代理供IPC使用。
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
LOGI("ServiceManager: %p", sm.get());
AudioFlinger::instantiate();
MediaPlayerService::instantiate();
CameraService::instantiate();
AudioPolicyService::instantiate();
//循環處理binder所送過來的消息。
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
Mediaserver作爲一個service,需要向其他的模塊提供各種服務,因此main函數的開頭和結尾與其他的service並無其他的區別,這裏不具體介紹。如果這裏有疑惑請參閱其他關於binder方面的文章。
而中間的四句話也非常好理解,所有的::instantiate()函數都是static型函數,並,分別是創建各個子模塊的對象實例。由此可看出media server service共分4個子模塊:AudioFlinger, MediaPlayerService,CameraService, AudioPolicyService。 下面我們分別來具體分析這四個子模塊