Android 应用程序突然强制关闭
我创建了一个音乐应用程序。该应用程序有16个音乐BTN。该应用程序运行时没有问题,但当我多次按下BTN时,该应用程序强制关闭Android 应用程序突然强制关闭,android,Android,我创建了一个音乐应用程序。该应用程序有16个音乐BTN。该应用程序运行时没有问题,但当我多次按下BTN时,该应用程序强制关闭 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,
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;
我认为关键是MediaPlayer是一个相当重要的资源,你不应该创建太多。另外,一旦您完成了它,就调用它的release方法。Anon的观点都是正确的:您应该尝试重新使用您的媒体播放,而不是创建新的媒体播放,并且您应该非常熟悉MediaPlayer文档。例如,从MediaPlayer文档中: 资源可能包括单例 硬件等资源 加速部件和故障诊断 呼叫释放可能会导致后续故障 MediaPlayer对象的实例 回退到软件实现 或者完全失败
假设您正在分配大量MediaPlayer对象,并且/或者没有足够快地释放它们。但是,如果没有更多的代码,就无法确定。是否需要在每次按下按钮时创建一个新的MediaPlayer?这个类有reset和setDataSource方法是有原因的。对不起,我是android开发的新手!我如何修复它?请看一下该课程的文档。我可以得到更多帮助吗?…case R.id.btn:if mp!=null&&mp.isPlaying mp.stop;mp.reset;请尝试{mp.setDataSourcezoo.this,R.raw.gata;}捕获IllegalArgumentException e1{//TODO自动生成的捕获块e1.printStackTrace;}捕获IllegalStateException e1{//TODO自动生成的捕获块e1.printStackTrace;}捕获IOException e1{//TODO自动生成的catch block e1.printStackTrace;}mp.start;break;