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

  • 相关阅读:
    ecshop 整合 kindedotor
    css 一些小笔记
    linux 使用 随记录
    GIPZ 压缩
    js 代码 随记
    map和list循环遍历
    向数据库批量处理事件
    链表和数组的优劣比较
    内存对齐 和 sizeof小结
    C++的默认构造函数与构造函数
  • 原文地址:https://www.cnblogs.com/Denny_Yang/p/16458384.html
Copyright © 2020-2023  润新知