上回写了一篇博文,谈及MediaPlayer播放器有时候会没有声音的问题:(what=-38,extra=0) ,这篇文单讲的主要是在不恬当的状态下做了不适当的操作导致的,如当你release之后,当然不能做播放操作。当然这bn也是一个问题。后来,公司的测试人员,又找了我说,又复现了问题。然后他就复现给我看,他采取了频繁进出Activity的操作。这个当然能想到的是内存泄露等等问题,但是内存泄露又是多么微观,和不大可见的东西,该怎么去查看,怎么才能判断自己优化的代码还有没有问存泄露呢?
首先,Mediaplayer当然有底层的程序支持,这个MediaPlayer的使用是有上限的,所以,你不能无限地创建MediaPlayer,这会导致占用过多的资源,也就有我们所获到到的what=-1,extra=-19这种错误,所以会导致你的部分声音不能够播放。
然后,我们的查询工具,就是我们的dumpsys命令,dumpsys能够查询当前的状态,dumpsys media.audio_flinger命令,可以查看当然该服务的资源占用情况。查看之后可以看到有以下的进程,Active表示是否进行使用,Client是进程号。
其次,通过进程号来查询包名,然后过滤(grep 进程号)操作的应用所占用的数目。
此处,便可以查看你的进程使用了多少的mediaplayer资源,如果你频繁操作,进进出出,如果数目一直在增加,便说明你的应用使用的不当,应当仔细查看创建与销毁是否得当。
根据这个方法,我根治了我的应用没声音的情况,希望对你有用~
加油,共勉~