按下返回鍵時,App 崩潰,日誌顯示 MediaPlayer 仍在播放狀態下被釋放或重複操作。
onKeyDown 中直接呼叫 mediaPlayer.stop(); mediaPlayer.release(); 後,又啟動新 Intent 跳轉,導致原 Activity 銷毀時 MediaPlayer 狀態不一致。runable 仍在輪詢 mediaPlayer.getCurrentPosition(),存取已釋放的物件。onPause/onStop/onDestroy 中統一釋放資源,依賴鍵盤事件處理易漏、易錯。onPause() 暫停播放,onStop() 或 onDestroy() 執行 release()。if (mediaPlayer == null) break;。@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish(); // 讓 Activity 正常走生命週期
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer != null && mediaPlayer.isPlaying())
mediaPlayer.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
// 停止背景執行緒
handler.removeCallbacksAndMessages(null);
}
遵循 Activity 生命週期管理 MediaPlayer,移除手動釋放與跳轉邏輯,背景執行緒加空值檢查,即可消除返回鍵崩潰。