我的Android应用程序目前正在发生什么:
我将一个简单的图像映射到一个按钮,让它在点击时发出声音。在每次单击时,我在我的原始文件夹中创建一个带声音文件的MediaPlayer对象,我为该MediaPlayer对象设置一个OnClickListener,它停止播放该文件并将其释放,然后我播放MediaPlayer对象。
已定义部分的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
ImageButton start = (ImageButton) findViewById(R.id.imageButton1);
start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MediaPlayer play = MediaPlayer.create(MainActivity.this, R.raw.dvno);
play.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.stop();
mp.release();
mp = null;
}
});
play.start();
}
});
}
它出了什么问题:
它工作正常并且不会崩溃,但它对于记忆来说很糟糕,而且一般来说非常慢。我希望用户能够连续多次点击按钮,尽可能快地听到声音播放,并一遍又一遍地重复听到声音播放。在每次单击时创建一个新的MediaPlayer对象并等待它完成并被释放会消耗太多资源,并且声音通常落后于实际按下按钮。我希望能够创建一个单独的声音作为MediaPlayer对象,可以在重叠时播放。
可能的解决方案:
在onCreate范围内创建一个最终的MediaPlayer对象,而不是onClick,并以某种方式使用线程在每次单击时启动MediaPlayer对象。我读到这可能是一个可能的解决方案,但我以前从未使用过线程,我不知道它们是否比我当前的代码慢,如果不慢,所以我想知道是否有没有使用可能更简单的线程的解决方案。在这一点上操纵单个MediaPlayer的状态以使其自身重叠似乎是不可能的,但也许我错了。
由于非法国家会导致该程序崩溃吗?如果没有,这会比我想要的慢吗?如果没有,有人可以建议修复我的代码吗?