You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android游戏开发中MediaPlayer播放音频仅45秒停止如何解决?

问题根源

你在onCreate方法中声明的MediaPlayer属于局部变量,onCreate执行完成后该变量就失去了强引用,会被Android系统的垃圾回收机制自动回收,自然就会中断播放。你遇到的45秒停止刚好是常规的垃圾回收触发周期,和音频文件本身无关。

修复方案

你已经在MainActivity类中声明了MediaPlayer bkgrdmsc成员变量,直接将MediaPlayer实例赋值给该成员变量即可,不要在onCreate中创建独立的局部MediaPlayer变量。修改后的代码如下:

package com.example.androidstudio2dgamedevelopment;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.media.MediaPlayer;
import android.view.WindowManager;

/**
 * Main Activity is the entry point to our application
 */
public class MainActivity extends Activity {

    private int width;
    private int height;
    // 用成员变量持有MediaPlayer实例,避免被GC回收
    MediaPlayer bkgrdmsc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 直接给成员变量赋值,不要创建局部的mediaPlayer变量
        bkgrdmsc = MediaPlayer.create(this, R.raw.fg);
        bkgrdmsc.setLooping(true);
        bkgrdmsc.start();

        //Set Window to fullscreen (will hide status bar)
        Window window = getWindow();
        this.width = 240;
        this.height = 240;

        //Set Content view to game, so that objects in the Game Class can be rendered to the screen
        setContentView(new Game(this));
    }

    // 补充生命周期处理,避免内存泄漏和后台异常
    @Override
    protected void onPause() {
        super.onPause();
        if(bkgrdmsc != null && bkgrdmsc.isPlaying()){
            bkgrdmsc.pause();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(bkgrdmsc != null && !bkgrdmsc.isPlaying()){
            bkgrdmsc.start();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(bkgrdmsc != null){
            bkgrdmsc.release();
            bkgrdmsc = null;
        }
    }
}
补充说明
  • 成员变量会伴随Activity的完整生命周期存在,只要Activity没有被销毁,MediaPlayer实例就不会被提前回收,循环播放逻辑可以正常生效
  • 新增的生命周期处理逻辑可以避免应用退到后台时仍占用音频焦点,同时防止Activity销毁时MediaPlayer资源泄漏

内容的提问来源于stack exchange,提问作者NaoyaShinota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 00:18:04