我创建了一个音乐应用程序。该应用程序有16个音乐btns.the应用程序运行没有问题,但是当我按下btns多次应用程序强制下来..
super.onCreate(icicle);
setContentView(R.layout.main);
int[] ids = {R.id.btn,R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.btn10,
R.id.btn11, R.id.btn12, R.id.btn13, R.id.btn14, R.id.btn15, R.id.btn16 };
for (int i : ids) {
b = (Button) findViewById(i);
b.setOnClickListener(this);
}}
//outside of onCreate()
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn:
if (mp != null && mp.isPlaying()) mp.stop();
mp = MediaPlayer.create(zoo.this, R.raw.gata);
mp.start();
break;
这是代码,我使用每个btn的情况。当应用程序强制关闭时,logCat在mp.start()中找到NullPointerException;强制关闭应用程序的按钮..请帮忙!
通过以下评论编辑:
case R.id.btn:
if (mp != null && mp.isPlaying()) mp.stop();
mp.reset();
try {
mp.setDataSource("zoo.this,R.raw.gata");
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalStateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mp.start();
break;
答案 0 :(得分:0)
我认为重点是MediaPlayer是一个非常重的资源,你不应该创建太多的资源。此外,一旦完成它,请调用它的release()方法。 Anon的观点是有效的:您应该尝试重用媒体播放而不是创建新媒体播放,您应该对MediaPlayer文档非常熟悉。例如,来自MediaPlayer文档:
资源可能包括单身人士 硬件等资源 加速组件和失败 call release()可能导致后续 MediaPlayer对象的实例 回退到软件实现 或完全失败。
假设是您分配了大量MediaPlayer对象和/或没有足够快地释放它们。但是,如果没有更多代码,就无法确定。