2017-04-02 3 views
0

私はボタンを押すたびに再生するように発射音を設定しました(これは何度もクリックする必要があるため、発砲ボタンです)。 私はプログラムを実行すると、銃声が私がそれを押すたびに再生されますが、28回目のボタンを押すと、サウンドはもはや再生されません。しかし、私が追加したToastはまだ動作します。これがなぜなのか?ボタンの効果音が働く回数が28回

activity_main.xml:

<Button 
     android:id="@+id/fire" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="fire" 
     android:onClick="fire" 
     android:textSize="35sp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

Main.java:

package com.example.brans.zoombie; 

import android.media.MediaPlayer; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Toast; 

public class Main extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void fire(View v){ 
    MediaPlayer mp = MediaPlayer.create(Main.this, R.raw.pistol); 
    mp.start(); 
    Toast.makeText(this, "shot fired", Toast.LENGTH_SHORT).show(); 
} 
} 

29時間後、logcatはこれを言います。

04-02 16:07:56.371 23703-23717/com.example.brans.zoombie  V/MediaPlayer:message received msg=100, ext1=1, ext2=-19 
04-02 16:07:56.371 23703-23717/com.example.brans.zoombie E/MediaPlayer: error (1, -19) 
04-02 16:07:56.371 23703-23717/com.example.brans.zoombie V/MediaPlayer: callback application 
04-02 16:07:56.371 23703-23717/com.example.brans.zoombie V/MediaPlayer: back from callback 
+0

さまざまな変数の状態を確認するために29番目のブレークポイントはどうですか? – efekctive

答えて

1

メモリ例外を回避するには、メディアプレーヤーをRAMから削除する必要があります。

public void fire(View v){ 
    MediaPlayer mp = MediaPlayer.create(Main.this, R.raw.pistol); 
    mp.start(); 
    Toast.makeText(this, "shot fired", Toast.LENGTH_SHORT).show(); 
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
     mp.stop(); 
     if (mp != null) { 
      mp.release(); 
     } 

     } 
    }); 
} 
+0

'メソッド 'killMediaPlayer()'を解決できません。 –

+0

更新したばかりの新しいコードを試してみてください。 – Nobody

+0

このコードは機能しますが、私が変更したのはmpを 'final'にすることでした。 –

0

完成したサウンドから解放するためにメディアプレーヤーを解放し、別の時間に再生するようにリセットする必要があると思います。それはもはや記憶にはありません。