首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android MediaPlayer 停止播放導致崩潰的修正方法

     編輯:程式設計綜合問答

在使用 MediaPlayer 實作播放/停止功能時,若直接在停止按鈕中呼叫 stop() 後緊接著 release(),但播放執行緒中的 Runnable 仍嘗試呼叫 getCurrentPosition(),會導致非法狀態異常而崩潰。

問題程式碼

case R.id.widget31: // RESET
    mHandler.post(new Runnable() { ... }); // 更新 UI
    mPlayer.stop();
    mPlayer.release();
    break;

修正方式

必須先移除 Handler 中的 Runnable,確保播放執行緒不再存取已釋放的 MediaPlayer:

case R.id.widget31: // RESET
    mHandler.removeCallbacksAndMessages(null); // 停止所有排程任務
    mPlayer.stop();
    mPlayer.release();
    mPlayer = null; // 避免後續誤用
    break;

最佳實務

  • 播放前檢查 mPlayer != null 且 !mPlayer.isPlaying()。
  • 使用 setOnCompletionListener 釋放資源而非手動管理。
  • Activity 銷毀時在 onDestroy() 統一釋放。

遵循上述順序,即可避免停止播放時的強制關閉錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved