电竞比分网-中国电竞赛事及体育赛事平台

分享

深入Android MediaPlayer的使用方法詳解

 落雨不悔 2019-04-23

MediaPlayer使用技巧

  在使用MediaPlayer的使用過(guò)程中,有個(gè)小技巧需要說(shuō)明一下:

  1、在使用start()播放流媒體之前,需要裝載流媒體資源。這里最好使用prepareAsync()用異步的方式裝載流媒體資源。因?yàn)榱髅襟w資源的裝載是會(huì)消耗系統(tǒng)資源的,在一些硬件不理想的設(shè)備上,如果使用prepare()同步的方式裝載資源,可能會(huì)造成UI界面的卡頓,這是非常影響用于體驗(yàn)的。因?yàn)橥扑]使用異步裝載的方式,為了避免還沒(méi)有裝載完成就調(diào)用start()而報(bào)錯(cuò)的問(wèn)題,需要綁定MediaPlayer.setOnPreparedListener()事件,它將在異步裝載完成之后回調(diào)。異步裝載還有一個(gè)好處就是避免裝載超時(shí)引發(fā)ANR((Application Not Responding)錯(cuò)誤。


  1. 01.1 mediaPlayer = new MediaPlayer();
  2. 02.2 mediaPlayer.setDataSource(path);
  3. 03.3 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  4. 04.4
  5. 05.5 // 通過(guò)異步的方式裝載媒體資源
  6. 06.6 mediaPlayer.prepareAsync();
  7. 07.7 mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
  8. 08.8 @Override
  9. 09.9 public void onPrepared(MediaPlayer mp) {
  10. 10.10 // 裝載完畢回調(diào)
  11. 11.11 mediaPlayer.start();
  12. 12.12 }
  13. 13.13 });

2、使用完MediaPlayer需要回收資源。MediaPlayer是很消耗系統(tǒng)資源的,所以在使用完MediaPlayer,不要等待系統(tǒng)自動(dòng)回收,最好是主動(dòng)回收資源。

  1. 1.1 if (mediaPlayer != null && mediaPlayer.isPlaying()) {
  2. 2.2 mediaPlayer.stop();
  3. 3.3 mediaPlayer.release();
  4. 4.4 mediaPlayer = null;
  5. 5.5 }
3、使用MediaPlayer最好使用一個(gè)Service來(lái)使用,并且在Service的onDestory()方法中回收MediaPlayer資源,實(shí)際上,就算是直接使用Activity承載MediaPlayer,也最好在銷(xiāo)毀的時(shí)候判斷一下MediaPlayer是否被回收,如果未被回收,回收其資源,因?yàn)榈讓诱{(diào)用的native方法,如果不銷(xiāo)毀還是會(huì)在底層繼續(xù)播放,而承載的組件已經(jīng)被銷(xiāo)毀了,這個(gè)時(shí)候就無(wú)法獲取到這個(gè)MediaPlayer進(jìn)而控制它。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多