Android中的Audio播放:竞争Audio之Audio Focus的应用(2)

AudioFocus Sequence


Audio Focus被抢占与再次获取的时序图

注意:为了描述简单,此图中除了两个竞争Audio Focus的App之外,只用AudioManager表征了Android的AudioFocus机制中内部参与的对象,实际AudioManager只是外部的表象,内部参与的对象很多,回调函数也并非简单的直接由AudioManager调用,其中还包含了复杂的IPC机制。

图中:

AudioFocus Client通过requestAudioFocus()获取AudioFocus,在获得AudioFocus之后,开始播放Audio[Step#1 ~ #2]; 其它程序(Other App)也通过requestAudioFocus()获取同类AudioStream的AudioFocus [Step#3] AudioFocus Client失去了Audio Focus,在onAudioFocusChanged()中,根据focusChange的值,做第二节中的处理[Step#4]; 其它程序(Other App)获取Audio Focus之后,开始播放Audio[Step#5]; 其它程序(Other App)使用Audio之后,通过归还AudioFocus [Step#6]; AudioFocus Client重新获得了Audio Focus,可做进一步的处理 [Step#7]

小结

Audio Focus机制要参与各方充分理解并统一遵照施行,有没有遵照者或者实现有误的程序存在就可能打破这一机制,带来糟糕的用户体验。在保证Built-in程序没问题的前提下,如果进入AndroidMarket之前的程序都严格执行了AudioFocus相关的测试,应该也没问题。

相关阅读:Android中的Audio播放:控制Audio输出通道切换

问题点以及进一步的探讨

内部裁决机制怎样的? 申请的不同Audio Stream之间是不存在竞争的吗?

更多Android相关信息见Android 专题页面 ?tid=11

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyypgy.html