Andriod 媒体app 改造 笔记(非公开)

自己的踩坑笔记,对外人没用,不要浪费时间

1、因为setNextPlayer报错了,引发了onCompletion(而onCompletion中将 mCurrentMediaPlayer释放了,mNextMediaPlayer也被置为null了!)

      然后发送了消息去播放下一首,导致下载了所有歌曲(会循环这个异常)

      这个坑很久没找到,最好在player的onError和onCompletion上都加上日志(至少有2个错,都是因为它们走到这里来了,而且可能会导致客户端异常,一直下载歌曲【因此onerror里最好一直返回true,因onCompletion里会发送放下一首的消息出去】)

 

2、测试:onError最终返回true之后,正常播放完本歌曲,会进入onCompletion吗?

     没有问题,正常播放完歌曲,不会进入onError。切换歌曲,也不会进入onError(当然也没有进入onCompletion【因为没有播放完嘛】)

 

[todo]3、暂停后重新播放,会触发play(),继而触发setNextTrack

     这个处理逻辑可能会引起问题(在处理网络歌曲时,因为会导致重新prepare,之前那首可能还在下载,会导致nextPlayer release并重设)

 

[todo]4、切歌曲到下一首时,从setNextTrack: next play position = 3开始,后续的代码被执行了2次

     切下一首会触发gotoNext,这个函数会依次调用:

     1 -> openCurrentAndMaybeNext(true) -> setNextTrack() 

     2 -> play(true) -> setNextTrack()

    最终导致setNextTrack中执行两次(nextPlayer会release,如果是网络歌曲,会引起Broken pipe),而且代码这段代码重复执行,有什么好处?

posted @ 2022-07-08 15:03  流失的痕迹  阅读(25)  评论(0编辑  收藏  举报