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

我想你应该不得不释放媒体播放器才能从完整的声音中释放,然后重置它以再次播放它。所以它不会再在内存中。