应用程序突然下降

时间:2011-01-16 21:34:11

标签: android

我创建了一个音乐应用程序。该应用程序有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;

1 个答案:

答案 0 :(得分:0)

我认为重点是MediaPlayer是一个非常重的资源,你不应该创建太多的资源。此外,一旦完成它,请调用它的release()方法。 Anon的观点是有效的:您应该尝试重用媒体播放而不是创建新媒体播放,您应该对MediaPlayer文档非常熟悉。例如,来自MediaPlayer文档:

  

资源可能包括单身人士   硬件等资源   加速组件和失败   call release()可能导致后续   MediaPlayer对象的实例   回退到软件实现   或完全失败。

假设是您分配了大量MediaPlayer对象和/或没有足够快地释放它们。但是,如果没有更多代码,就无法确定。