前面的文章中讲到Engine设备的选择,那么这个类是怎么被初始化的呢?可以看到在AudioPolicyManager的构造器中,
AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientInterface)
{
// Once policy config has been parsed, retrieve an instance of the engine and initialize it.
audio_policy::EngineInstance *engineInstance = audio_policy::EngineInstance::getInstance();
if (!engineInstance) {
ALOGE("%s: Could not get an instance of policy engine", __FUNCTION__);
return;
}
// Retrieve the Policy Manager Interface
mEngine = engineInstance->queryInterface<AudioPolicyManagerInterface>();
if (mEngine == NULL) {
ALOGE("%s: Failed to get Policy Engine Interface", __FUNCTION__);
return;
}
mEngine->setObserver(this);
status_t status = mEngine->initCheck();
(void) status;
ALOG_ASSERT(status == NO_ERROR, "Policy engine not initialized(err=%d)", status);
}
有对Engine进行初始化,这里有个EngineInstance类,这个类保证只有只能构造一个Engine实例,Engine只有在其它的参数被初始化之后才能对它进行初始化。