从一个bug教你如何分析Android系统代码


最近项目遇到一个bug,我先描述下bug现象。耳机模式下,播放音乐,手动背光灭屏(或者自动背光灭屏),音乐暂停;手动点亮屏音乐又可以继续播放,从bug描述上猜测应该是灭屏的时候把音乐暂停了,然而并不是。因为亮屏时发现播放的时间并不是灭屏的时间,也就说灭屏状态下音乐依旧在播放,只是耳机没有输出罢了。

既然找到问题原因了,我们接着来分析下声音播放流程。


上图是使用MediaPlayer播放mp3文件的一个简单流程。调用start函数开始播放。


调用了JNI函数_start(),继续跟踪_start()函数


可以看下mp,熟悉android C++开发都知道这个是一个强指针,使用强指针开发者不用过分关注指针释放的问题,为了防止内存泄漏。跟踪代码可以发现MediaPlayer对应的是mediaplayer.cpp文件,看下该文件中start是如何实现的?


重点看下mPlayer,是sp<IMediaPlayer> 指针类型,IMediaPlayer是一个Interface类型,也就是说可以用于IPC通信,来看下他的Bn和Bp端,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值