单击button时最有效的播放声音的方法

现在我有两个button。 每个人都需要产生不同的声音。 在未来,可能会有大约8个button,但现在只有两个button。

public class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Button btnDrum1 = (Button) findViewById(R.id.btnDrum1); btnDrum1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MediaPlayer mp = MediaPlayer.create(this, R.raw.drum1); mp.start(); mp.release(); } }); final Button btnCym1 = (Button) findViewById(R.id.btnCym1); btnCym1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MediaPlayer mp = MediaPlayer.create(this, R.raw.cym1); mp.start(); mp.release(); } }); } } 

本来我没有mp.release(),它会正确播放声音,但最终应用程序会因为内存不足而崩溃。 现在用mp.release()它不会崩溃,但有时它不会单击播放声音。

这是点击button时播放声音的最有效方法吗? 它是可扩展的吗?

Solutions Collecting From Web of "单击button时最有效的播放声音的方法"

我认为这是因为你在播放的时候释放它。 为每个声音制作一个全球MediaPlayer,然后重复使用它,在活动closures时释放(甚至可能在暂停时释放,如果声音文件很大,则从简历中重新加载)。 此外,由于您将有许多button,您可以在onCreate()上实例化的所有button上有一个onclicklistener:

 private class MyMagicalOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: //play sound 1 break; case R.id.button2: //play sound 2 break; } } } 

只是评论和告诉我,如果你不确定如何实现这一点:)

编辑:每个请求,这是一个整洁的实现,应该与您的应用程序奇迹。 我做了它,所以活动实现onclicklistener,而我认为这是一个更清洁一点。

 public class Bluarg extends Activity implements OnClickListener{ MediaPlayer mp1; MediaPlayer mp2; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mp1 = MediaPlayer.create(this, R.raw.sound1); mp2 = MediaPlayer.create(this, R.raw.sound2); final Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(this); final Button button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: mp1.start(); break; case R.id.button2: mp2.start(); break; } } @Override protected void onDestroy() { mp1.release(); mp2.release(); super.onDestroy(); } } 

如果您的应用程序将具有更多button,则应使用SoundPool而不是MediaPlayer。 因为MediaPlayer会毁掉你的应用程序内存不能播放声音了。

这帮助我了! 我想你也会用SoundPool播放声音