2013-03-10 2 views
2

Я разрабатываю приложение, содержащее 100 звуковых эффектов. после воспроизведения некоторых звуков, действие приложения закрывается. Я понял, что проблема будет потреблять все свободное пространство памяти. Я пробовал использовать метод Release(), но после вызова этого метода я не могу снова воспроизвести звук. Я также попытался использовать метод onDestroy(), чтобы установить объект медиаплеера равным 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

'приложение силы закрывает заботу, чтобы показать трассировку стека? – WarrenFaith

+0

может быть ['SoundPool'] (http://developer.android.com/reference/android/media/SoundPool.html) более подходит для вас? –

+0

не могли бы вы разместить свой журнал аварий? – yushulx

ответ

1

Вы пробовали что-то вроде этого?

Вы можете вызвать release() в методе OnDestroy().

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