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
相关产品推荐
相关产品推荐

