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),而且代码这段代码重复执行,有什么好处?