2017-04-02 100 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

我想你應該不得不釋放媒體播放器才能從完整的聲音中釋放,然後重置它以再次播放它。所以它不會再在內存中。