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

Android Studio中跳转至下一个Activity时如何停止MediaPlayer

解决Android Activity跳转时停止MediaPlayer的问题

我来帮你搞定这个问题,其实思路很清晰,咱们一步步修改代码就能实现需求:

1. 先把MediaPlayer改成类成员变量

首先得让MediaPlayer在整个Activity里都能被访问到,所以要把它声明成类的成员变量,而不是局部变量。然后在onCreate里完成初始化(这里假设你是从res/raw文件夹里的音频资源初始化,记得换成你自己的音频文件哈):

public class momtahina5 extends AppCompatActivity {
    private static final String TAG = "momtahina5";
    // 声明MediaPlayer为类成员
    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_momtahina5);
        Log.d(TAG,"onCreate: Starting.");

        // 初始化MediaPlayer,替换成你的音频资源ID
        mediaPlayer = MediaPlayer.create(this, R.raw.your_audio_file);
        // 如果需要自动播放,就加这行
        mediaPlayer.start();

        // 你的按钮初始化代码...
        Button gotobakara201 = (Button) findViewById(R.id.gotobakara201);
        Button backtobakara286 = (Button) findViewById(R.id.backtobakara286);

2. 在跳转按钮的点击事件里停止MediaPlayer

在启动新Activity之前,先把MediaPlayer停掉并释放资源,不然它可能在后台继续播放,还会浪费系统资源:

gotobakara201.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 先停掉MediaPlayer
                stopMediaPlayer();
                // 再跳转到目标Activity,替换成你实际的Activity类名
                Intent intent = new Intent(momtahina5.this, Bakara201Activity.class);
                startActivity(intent);
            }
        });

        // 返回按钮的处理也一样,跳转前先停掉MediaPlayer
        backtobakara286.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopMediaPlayer();
                finish(); // 如果是返回上一个页面,用finish()就可以
                // 要是你是启动另一个Activity返回,就和上面一样用Intent+startActivity
            }
        });
    }

3. 封装一个复用的停止方法

为了避免重复写停止MediaPlayer的代码,咱们封装一个专门的方法,这样哪里需要停就调用哪里:

// 封装停止MediaPlayer的逻辑
    private void stopMediaPlayer() {
        if (mediaPlayer != null) {
            // 如果正在播放,先停止
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            // 一定要释放资源,防止内存泄漏
            mediaPlayer.release();
            // 置空,避免后续出现空指针异常
            mediaPlayer = null;
        }
    }

4. 在Activity生命周期里兜底处理

除了跳转的时候,当Activity被销毁或者暂停(比如用户按返回键、切到后台),也得把MediaPlayer停掉,不然会出问题:

@Override
    protected void onDestroy() {
        super.onDestroy();
        stopMediaPlayer();
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 如果你希望Activity一暂停就停止播放,就调用这个方法
        stopMediaPlayer();
    }
}

一些小提醒

  • 记得把代码里的Bakara201Activity换成你实际要跳转的Activity类名,R.raw.your_audio_file替换成你的音频资源ID。
  • 千万别忘了调用release()方法释放资源,不然容易出现内存泄漏,影响App性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:04