音頻播放中點擊當前歌曲播放下一首歌的問題解決

在項目中有這樣一個需求呼畸,就是在列表中點擊一首歌會跳到歌曲的詳情頁進行播放,關(guān)于音頻播放常用的做法就是用service來進行播放,activity與service直接建立一個中間人對象,通過中間人來控制音樂的播放與暫停或者上一首锌蓄,下一首。

在播放代碼中一般對MediaPlayer對象進行如下設(shè)置:

mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(mOnPreparedListener);
mediaPlayer.setOnCompletionListener(mOnCompletionListener);
mediaPlayer.setOnErrorListener(mOnErrorListener);
mediaPlayer.prepareAsync();

在實際運用過程中發(fā)現(xiàn)當我點擊第一首播放的時候撑柔,會自動播放下一首瘸爽,第一首不會播放。對播放的監(jiān)聽里面打log發(fā)現(xiàn)铅忿,一開始播放第一首的時候直接不會走PreparedListener的監(jiān)聽而是直接走了CompletionListener的監(jiān)聽剪决。但是當我在當前界面而不進入詳情頁,通過startService來進行播放的時候就沒有問題檀训。

然后進行谷歌昼捍,上面說prepareAsync( )方法是一個異步操作,用prepared( )方法才會走PreparedListener的監(jiān)聽肢扯,遂將prepareAsync()方法改為prepared( )妒茬。這個時候問題貌似解決了,但是后面還有更大的坑在等著我蔚晨。乍钻。。铭腕。

因為prepared( )在主線程中是個耗時操作银择,原先的時候在音樂詳情頁的activity中oncreat( )下通過bindservice 跟 startservice來進行音樂的播放。當我們點擊當前列表條目的時候累舷,需要等待4 5 秒才能進入音樂詳情頁進行音樂的播放浩考。

很顯然這樣是不符合我們的預期的,經(jīng)過打斷點調(diào)試發(fā)現(xiàn)問題就出在startservice( )調(diào)用之后再在service里面的mediaplayer調(diào)用prepared( )方法所致被盈。當時開發(fā)比較緊張析孽,先用handler的postdelayed( )方法延遲500毫秒加載startService( )方法。

至此可以現(xiàn)在打開音樂詳情的界面只怎,然后進行播放了袜瞬。但是這樣也是治標不治本,prepared( )還是運行在主線程身堡,等待播放的時候還是需要等待4 5 秒鐘邓尤,很容易造成ANR。并且在測試環(huán)境下,有可能后臺給的歌曲地址不正確播放不出來的時候汞扎,app就會假死季稳,盡管我設(shè)置了出錯的監(jiān)聽。

本質(zhì)上還是要把prepared( )方法改為prepareAsync( )澈魄,經(jīng)老大研究別的開源項目指點景鼠,將CompletionListener放在PreparedListener里面,代碼如下:

mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(mOnPreparedListener);
mediaPlayer.setOnErrorListener(mOnErrorListener);

private MediaPlayer.OnPreparedListener mOnPreparedListener = new MediaPlayer.OnPreparedListener( ) {    
@Override    
public void onPrepared(MediaPlayer mp) {        
OnCompletionListener(mOnCompletionListener);   
  }
 };

自我感覺的話應(yīng)該是異步的時候還沒準備好就直接進行CompletionListener了一忱,上面代碼這樣操作的時候就相當于準備好了以后才能進行播放完成的監(jiān)聽。

因為音頻播放的問題相對來說開發(fā)的比較少谭确,谷歌的很多都是基礎(chǔ)的播放問題帘营,還是需要自己多多琢磨啊。

前人栽樹后人乘涼逐哈,以后就會少走很多彎路芬迄,共勉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昂秃,隨后出現(xiàn)的幾起案子禀梳,更是在濱河造成了極大的恐慌,老刑警劉巖肠骆,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件算途,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚀腿,警方通過查閱死者的電腦和手機爆惧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門移盆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事坝初。” “怎么了苛坚?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵中鼠,是天一觀的道長。 經(jīng)常有香客問我蚊伞,道長席赂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任时迫,我火速辦了婚禮氧枣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘别垮。我一直安慰自己便监,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烧董,像睡著了一般毁靶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逊移,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天预吆,我揣著相機與錄音,去河邊找鬼胳泉。 笑死拐叉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扇商。 我是一名探鬼主播凤瘦,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼案铺!你這毒婦竟也來了蔬芥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤控汉,失蹤者是張志新(化名)和其女友劉穎笔诵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姑子,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡乎婿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了街佑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片次酌。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舆乔,靈堂內(nèi)的尸體忽然破棺而出岳服,到底是詐尸還是另有隱情,我是刑警寧澤希俩,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布吊宋,位于F島的核電站,受9級特大地震影響颜武,放射性物質(zhì)發(fā)生泄漏璃搜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一鳞上、第九天 我趴在偏房一處隱蔽的房頂上張望这吻。 院中可真熱鬧,春花似錦篙议、人聲如沸唾糯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽移怯。三九已至香璃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舟误,已是汗流浹背葡秒。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嵌溢,地道東北人眯牧。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像赖草,于是被迫代替她去往敵國和親学少。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容