Android AudioFocus机制小结
abandonAudioFocus的flow
/frameworks/base/services/core/java/com/android/server/audio/MediaFocusControl.java
MediaFocusControl.java --> 这个类才是真正完成requestaudiofocus和abandonaudiofocus操作的
abandonAudioFocusremoveFocusStackEntry(clientId, true /*signal*/, true /*notifyFocusFollowers*/);FocusRequester fr = mFocusStack.pop(); --> 去掉第一个AudioFocus// notify the new top of the stack it gained focusnotifyTopOfAudioFocusStack();//mFocusStack是一个这样的类/frameworks/base/services/core/java/com/android/server/audio/FocusRequester.java// handleFocusGain handleFocusGainFromRequest handleFocusLossmFocusStack.peek().handleFocusGain(AudioManager.AUDIOFOCUS_GAIN);// /frameworks/base/media/java/android/media/IAudioFocusDispatcher.aidl// 实现在这里/frameworks/base/media/java/android/media/AudioManager.javafd.dispatchAudioFocusChange(focusGain, mClientId); //fd --> IAudioFocusDispatcherOnAudioFocusChangeListener listener =fri.mRequest.getOnAudioFocusChangeListener();// mHandler == NULL 所以在 mServiceEventHandlerDelegate中处理final Handler h = (fri.mHandler == null) ? mServiceEventHandlerDelegate.getHandler() : fri.mHandler;final Message m = h.obtainMessage(MSSG_FOCUS_CHANGE/*what*/, focusChange/*arg1*/, 0/*arg2 ignored*/,id/*obj*/);h.sendMessage(m);--> listener.onAudioFocusChange(msg.arg1); //这里就把这个focusChange传进去了。
简单解释一下:
- mFocusStack是一个FocusRequester的stack,当requestAudioFocus的时候就会创建一个FocusRequester,并放在这个stack中。
- 当abandon的时候,就会去掉顶端的audiofocus(前提是栈顶的audiofocus就是我们要abandon的)。
- 将要abandon的focus出栈后,就让新的栈顶的focus处理focus gain的消息。
- 消息的处理主要是通过IAudioFocusDispatcher这个类,传给audiomanager的一个内部类mServiceEventHandlerDelegate这个进行处理。
- 这个处理函数中会通过这个focus获取到我们request传进来的OnAudioFocusChangeListener 的listener,让listener来处理这个消息(AUDIOFOCUS_GAIN)。
释放过程会有两个flow:(参考http://blog.sina.com.cn/s/blog_645b74b90101e74f.html)
1:如果要释放的client是在栈顶,则释放之后,让下一个栈顶的client获得了audiofocus;
2:如果要释放的client不是在栈顶,则只是移除这个记录,不需要更改当前audiofocus的占有情况。
所以,这样的case的情况下,不论是什么类型的focus(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT 或者AudioManager.AUDIOFOCUS_GAIN …)都是按照栈的顺序来获取focus的。
Android AudioFocus机制小结相关推荐
- android decorview动画,Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解...
Android窗口机制系列 前篇文章中出现了PhoneWindow,DecorView这些类,如果是第一次见过的话,肯定会觉得陌生.这篇文章主要跟大家讲解Window,PhoneWindow,Deco ...
- Android 系统(177)---Android消息机制分析:Handler、Looper、MessageQueue源码分析
Android消息机制分析:Handler.Looper.MessageQueue源码分析 1.前言 关于Handler消息机制的博客实际上是非常多的了. 之前也是看别人的博客过来的,但是过了一段时间 ...
- Android 系统(51)Android窗口机制
Android窗口机制(四)ViewRootImpl与View和WindowManager 2017年01月15日 15:25:49 阅读数:259 在前篇第(三)文章中,我们讲到了在DecorVie ...
- Android系统(50)----Android窗口机制
Android窗口机制(一)认识Android的窗口结构 窗口结构 说明 每一个Activity都包含一个Window对象,Window对象通常由PhoneWindow实现 PhoneWindow:将 ...
- Android技能树 — 网络小结(6)之 OkHttp超超超超超超超详细解析
前言: 本文也做了一次标题党,哈哈,其实写的还是很水,各位原谅我O(∩_∩)O. 介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看 ...
- 屏幕刷新机制小结(九)
Android刷新机制 SurfaceView理解 一.Android屏幕刷新机制 首先需要了解一些基本概念 在一个显示系统里,一般包括CPU.GPU.Display三部分,CPU负责计算数据,把计算 ...
- ListView缓存机制小结
文章目录 ListView缓存机制小结 前言 概述 layout过程 第一次Layout 第二次Layout 滑动事件 参考资料 ListView缓存机制小结 前言 由于本人水平有限,如果文章中出现一 ...
- Android Handler机制简单分析
丨版权说明 : <Android Handler机制简单分析>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 本文一切从简,将围绕以下流程展开叙述: what why how ...
- Android 广播机制详解
一.广播的简介 首先,当我们一听到广播这个词时.就可以想到小学是教室的广播.不错Android中的广播机制与我们生活中的广播是有异曲同工之妙的.Android中的发送广播也就像广播室播广播,可以让很多 ...
最新文章
- POJ - 3041 Asteroids 二分图最小点覆盖
- 最长升序子串1231
- open vswitch_Linux Foundation采用Open vSwitch,定义了“开放”和更多开源新闻
- This is the default error page for nginx that is distributed with EPEL.
- 6年前的Dubbo,2年前的Spring Cloud,都被这个架构干掉了
- 大括弧之战 代码风格
- 2019 送给每位读者的几点拙见
- Atitit.每周计划日程表 流程表 v9 r829.docx
- 那个程序员的 Linux 常用软件清单 | Linux 工具篇
- 彩信文件服务器,彩信服务器怎么设置
- oracle诉讼_Oracle诉Google:Aaaaand诉讼又回来了! [更新]
- MATLAB实现光谱曲线包络线去除,附源代码
- 在地址栏直接使用Google“手气不错”功能
- iOS 11 正式发布!最全功能介绍 + 视频 ...
- Android home和back事件处理
- 最新初中级前端面试题合集一,你确定不看一看嘛
- python重复抽奖_python—抽奖程序
- 乐观锁 VS 悲观锁
- 单休和双休有多大区别(月薪1万和8千如何选择)
- android Easypermission权限管理
热门文章
- 管理之道(十) - 你还在崇拜交付速度吗?
- Linux中查看各文件夹大小命令du -h --max-depth=1
- java例外站点添加不上,java例外站点添加不了
- WPF 录屏软件研发心得及思路分享(已结束开发)
- 2021年,我们 CSDN App做了什么?
- USB接口PCB设计
- 5 款必备的免费在线画图工具!超级好用
- 服务器主机GHOST装系统,大神请绕道!科普电脑装系统最基本的两种方式,萌新千万不要错过...
- 《观察与思考》:相信中国,寻找下一个比尔·盖茨
- 【错误汇总】zabbix 监控偶遇问题一记