播放几次后,媒体播放器停止播放

我有一个按钮,按下它后播放随机声音片段,然后是另一个播放器,然后通过一个媒体播放器播放另一个按钮,但是按下按钮多次(15-20次)后,所有音频都停止了。 在播放完最后一个音频片段后我正在发布媒体播放器,所以我不认为这是原因。 有什么指针吗?

public class Main extends Activity { MediaPlayer mp; Button generate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); generate = (Button) findViewById(R.id.sound); } public void youSir (View view) { generate.setVisibility(View.INVISIBLE); Random randomGenerator = new Random(); int randomInt = randomGenerator.nextInt(3) + 1; switch (randomInt){ case 1: mp = MediaPlayer.create(this, R.raw.beg); mp.start(); break; case 2: mp = MediaPlayer.create(this, R.raw.begone); mp.start(); break; case 3: mp = MediaPlayer.create(this, R.raw.begtwo); mp.start(); break; } mp.setOnCompletionListener(new OnCompletionListener(){ // @Override public void onCompletion(MediaPlayer arg0) { audioTwo(); } }); } protected void audioTwo() { // TODO Auto-generated method stub Random randomGenerator = new Random(); int randomInt = randomGenerator.nextInt(3) + 1; switch (randomInt){ case 1: mp = MediaPlayer.create(this, R.raw.start); mp.start(); break; case 2: mp = MediaPlayer.create(this, R.raw.end); mp.start(); break; case 3: mp = MediaPlayer.create(this, R.raw.mid); mp.start(); break; } mp.setOnCompletionListener(new OnCompletionListener(){ // @Override public void onCompletion(MediaPlayer arg0) { audioThree(); } }); } protected void audioThree() { // TODO Auto-generated method stub Random randomGenerator = new Random(); int randomInt = randomGenerator.nextInt(3) + 1; switch (randomInt){ case 1: mp = MediaPlayer.create(this, R.raw.three); mp.start(); break; case 2: mp = MediaPlayer.create(this, R.raw.two); mp.start(); break; case 3: mp = MediaPlayer.create(this, R.raw.one); mp.start(); break; mp.setOnCompletionListener(new OnCompletionListener(){ // @Override public void onCompletion(MediaPlayer arg0) { mp.stop(); mp.release(); generate.setVisibility(View.VISIBLE); } }); } 

这是一个有点老问题,但我试图回答它,以防其他人有类似的问题。

您的音频资源不足。 该代码实际上不会释放所有MediaPlayer实例。 它每次运行只释放三分之一。 audioTwo()audioThree将新的MediaPlayer实例分配给mp变量,但它们不会释放已存储在其中的实例。 做类似的事情:

 protected void audioTwo() { // RELEASING PREVIOUS MEDIAPLAYER mp.release(); Random randomGenerator = new Random(); int randomInt = randomGenerator.nextInt(3) + 1; switch (randomInt){ case 1: mp = MediaPlayer.create(this, R.raw.start); mp.start(); break; ... 

audioThree()