AudioSystem和AudioFlinger以及AudioPolicyService的双向通信机制
AudioSystem是Audio子系统面向framework的接口,这里面有很多一竿子戳到底的函数。同样,Audio子系统内部也往往使用AudioSystem进行通信,比如AF和APM。
SystemServer添加AudioService到SM中,在AudioService的构造函数中,创建一个线程AudioSystemThread,名字就叫“AudioService”,它通过handler不停的接收消息。AudioManager里含有一个IAudioService类型的sService,它通过Binder让AudioService做事情。
AudioSystem.cpp第一次获取AF时,注册一个AF的死亡通知,对于APS同理。
const sp<IAudioFlinger>&AudioSystem::get_audio_flinger()
{
binder =sm->getService(String16("media.audio_flinger"));
gAudioFlingerClient = new AudioFlingerClient();
binder->linkToDeath(gAudioFlingerClient);
}
const sp<IAudioPolicyService>& AudioSystem::get_audio_policy_service()
{
bi