Android中能否实现多个onStop方法?双播客开发报错求助
解决Android播客应用的onStop重复定义及双播客独立播放问题
报错原因
Java语法规则不允许一个类存在两个同名、同参数列表的方法,你代码里重复定义了onStop(),这直接触发编译报错。不存在“两个独立onStop方法”的实现方式,正确思路是在同一个onStop()里处理两个播客的停止逻辑。
核心修复:双播客独立播放的正确实现
你当前只用了一个MediaPlayer实例,两个播客会互相覆盖无法独立播放。需要为每个播客单独创建MediaPlayer实例,再统一在onStop()中处理所有播放资源的释放。
修改后的完整代码
package com.example.breastiesapp; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.content.Intent; import androidx.appcompat.app.AppCompatActivity; public class MindActivity extends AppCompatActivity { public Button button; // 为两个播客分别声明MediaPlayer实例 MediaPlayer mediaPlayer1; MediaPlayer mediaPlayer2; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mind); // 初始化两个实例为null mediaPlayer1 = null; mediaPlayer2 = null; //Body Button button = (Button) findViewById(R.id.bodyBTN); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MindActivity.this,BodyActivity.class); startActivity(intent); } }); //Home Button button = (Button) findViewById(R.id.homeBTN); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MindActivity.this, MainActivity.class); startActivity(intent); } }); } //Play Pod 1 public void PlayPod1(View view) { switch (view.getId()) { case R.id.btnPlayPod1: if (mediaPlayer1 == null) { mediaPlayer1 = MediaPlayer.create(this, R.raw.pod1feelmorejoy); } mediaPlayer1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { stopPod1(); } }); mediaPlayer1.start(); break; case R.id.btnPausePod1: if (mediaPlayer1 !=null) mediaPlayer1.pause(); break; case R.id.btnStopPod1: if (mediaPlayer1 != null) { mediaPlayer1.stop(); stopPod1(); } break; } } private void stopPod1() { if (mediaPlayer1 != null) { mediaPlayer1.release(); mediaPlayer1 = null; } } //Play Pod 2 public void PlayPod2(View view) { switch (view.getId()) { case R.id.btnPlayPod2: if (mediaPlayer2 == null) { mediaPlayer2 = MediaPlayer.create(this, R.raw.usingmindfulnesstoreducestressandstrengthenyourimmune); } mediaPlayer2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { stopPod2(); } }); mediaPlayer2.start(); break; case R.id.btnPausePod2: if (mediaPlayer2 !=null) mediaPlayer2.pause(); break; case R.id.btnStopPod2: if (mediaPlayer2 != null) { mediaPlayer2.stop(); stopPod2(); } break; } } private void stopPod2() { if (mediaPlayer2 != null) { mediaPlayer2.release(); mediaPlayer2 = null; } } // 仅保留一个onStop方法,同时停止两个播客 @Override protected void onStop() { super.onStop(); stopPod1(); stopPod2(); } }
关键修改说明
- 新增
mediaPlayer1和mediaPlayer2两个独立实例,确保两个播客的播放状态互不干扰 - 每个播客的播放、暂停、停止逻辑都绑定对应
MediaPlayer实例 - 删除重复的
onStop()方法,在单个onStop()中统一调用两个播客的停止方法,保证页面切换时所有播放资源都能正确释放 - 在停止方法中增加非空判断,避免空指针异常
内容的提问来源于stack exchange,提问作者Gigi0425
相关产品推荐
相关产品推荐

