2013-03-10 23 views
2

我正在开发一个包含100个声音效果的应用程序。在播放应用程序关闭的一些声音之后,再次弹出 。我明白这个问题会消耗内存的所有可用空间。我尝试使用Release()方法,但在调用此方法后,我无法再次播放声音。 我也尝试使用onDestroy()方法将mediaplayer的对象设置为null,但由于这些对象必须是最终的,我不能这样做。 你的建议是什么? 这里是我的代码:使用MediaPlayer后释放消耗的内存

final MediaPlayer mp1 = MediaPlayer.create(MainActivity.this, R.raw.a1); 

    btn1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      if (i[0] == false) 
      { 

       mp1.start(); 
       Toast.makeText(getBaseContext(), "horn", Toast.LENGTH_SHORT).show(); 

       b1.setBackgroundResource(R.drawable.stop_button); 

       i[0] = true; 

      } 
      else 
      { 

       mp1.pause(); 
       mp1.seekTo(0); 

       b1.setBackgroundResource(R.drawable.horn); 

       i[0] = false; 

      } 

     } 
    }); 

    mp1.setOnCompletionListener(new OnCompletionListener() { 

     @Override 
     public void onCompletion(MediaPlayer mp) { 

      b1.setBackgroundResource(R.drawable.horn); 

     } 
    }); 
+0

'应用力closes'护理显示堆栈跟踪? – WarrenFaith 2013-03-10 14:41:54

+0

可能是['SoundPool'](http://developer.android.com/reference/android/media/SoundPool.html)更适合你吗? – 2013-03-10 14:42:42

+0

你能发布你的崩溃日志吗? – yushulx 2014-01-26 02:07:48

回答

1

你试过类似的东西吗?

您可以在OnDestroy()方法中调用release()。

@Override 
    public void onDestroy(){ 
    super.onDestroy(); 
     mp.release(); 
    }