0

我有大约 20-30 个按钮,每个按钮都会在点击时播放特定的声音。当我单击多个按钮时,由于内存已满,它会崩溃。我认为解决方案是让系统休眠,这样在声音剪辑结束之前不能按下其他按钮。然后我调用释放媒体播放器的条件。有没有另一种方法可以在媒体播放器完成后准确地释放它?

这是我的代码:

package com.example.buttonsdemo;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

    //Creating Sound arrays 
    //int i=0;
    MediaPlayer mediaplayer = new  MediaPlayer();
    Button button[] = new Button [120]; 
    int viewer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //first button
            final Button button_0 = (Button) findViewById(R.id.akali);
            button_0.setOnClickListener(this);
        //Second button
            final Button button_1 = (Button) findViewById(R.id.alistar);
            button_1.setOnClickListener(this);

            final Button button_2 =(Button) findViewById(R.id.ahri);
            button_2.setOnClickListener(this);

            final Button button_3 =(Button) findViewById(R.id.amumu);
            button_3.setOnClickListener(this);

            final Button button_4 =(Button) findViewById(R.id.anivia);
            button_4.setOnClickListener(this);

            final Button button_5 =(Button) findViewById(R.id.annie);
            button_5.setOnClickListener(this);

            final Button button_6 =(Button) findViewById(R.id.ashe);
            button_6.setOnClickListener(this);

            final Button button_7 =(Button) findViewById(R.id.blitz);
            button_7.setOnClickListener(this);

            final Button button_8 =(Button) findViewById(R.id.thresh);
            button_8.setOnClickListener(this);

            final Button button_9 =(Button) findViewById(R.id.brand);
            button_9.setOnClickListener(this);

            final Button button_10 =(Button) findViewById(R.id.Caitlyn);
            button_10.setOnClickListener(this);

            final Button button_11 =(Button) findViewById(R.id.Cass);
            button_11.setOnClickListener(this);

            final Button button_12 =(Button) findViewById(R.id.chogath);
            button_12.setOnClickListener(this);

            final Button button_13 =(Button) findViewById(R.id.Corki);
            button_13.setOnClickListener(this);

            final Button button_14 =(Button) findViewById(R.id.darius);
            button_14.setOnClickListener(this);

            final Button button_15 =(Button) findViewById(R.id.diana);
            button_15.setOnClickListener(this);

            final Button button_16 =(Button) findViewById(R.id.draven);
            button_16.setOnClickListener(this);

            final Button button_17 =(Button) findViewById(R.id.elise);
            button_17.setOnClickListener(this);

            final Button button_18 =(Button) findViewById(R.id.eve);
            button_18.setOnClickListener(this);

            final Button button_19 =(Button) findViewById(R.id.ezrael);
            button_19.setOnClickListener(this); 

            final Button button_20 =(Button) findViewById(R.id.fiddle);
            button_20.setOnClickListener(this);

            final Button button_21 =(Button) findViewById(R.id.fiora);
            button_21.setOnClickListener(this);

            final Button button_22 =(Button) findViewById(R.id.fizz);
            button_22.setOnClickListener(this);

            final Button button_23 =(Button) findViewById(R.id.galio);
            button_23.setOnClickListener(this);

            final Button button_24 =(Button) findViewById(R.id.garen);
            button_24.setOnClickListener(this);

            final Button button_25 =(Button) findViewById(R.id.gp);
            button_25.setOnClickListener(this);

            final Button button_26 =(Button) findViewById(R.id.gragas);
            button_26.setOnClickListener(this);

            final Button button_27 =(Button) findViewById(R.id.graves);
            button_27.setOnClickListener(this);

            final Button button_28 =(Button) findViewById(R.id.hecarim);
            button_28.setOnClickListener(this);

            final Button button_29 =(Button) findViewById(R.id.heimer);
            button_29.setOnClickListener(this);

           //onclicklistner         
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId())
        {

        case R.id.akali:
            mediaplayer = MediaPlayer.create(this, R.raw.akali);
             //viewer = R.layout.alistar;
            break;

        case R.id.alistar:
            mediaplayer= MediaPlayer.create(this, R.raw.alistar);
            break;

        case R.id.ahri:
            mediaplayer= MediaPlayer.create(this,R.raw.ahri);
                     break;
            case R.id.amumu:
            mediaplayer= MediaPlayer.create(this,R.raw.amumu);
                     break;
            case R.id.anivia:
            mediaplayer= MediaPlayer.create(this,R.raw.anivia);
                     break;
            case R.id.annie:
            mediaplayer= MediaPlayer.create(this,R.raw.annie);
                     break;
            case R.id.ashe:
            mediaplayer= MediaPlayer.create(this,R.raw.ashe);
                     break;
            case R.id.blitz:
            mediaplayer= MediaPlayer.create(this,R.raw.blitzcrank);
                     break;
            case R.id.brand:
            mediaplayer= MediaPlayer.create(this,R.raw.brand);
                     break;
            case R.id.Caitlyn:
            mediaplayer= MediaPlayer.create(this,R.raw.caitlyn);
                     break;
            case R.id.Cass:
            mediaplayer= MediaPlayer.create(this,R.raw.cassiopeia);
                     break;
            case R.id.chogath:
            mediaplayer= MediaPlayer.create(this,R.raw.chogath);
                     break;
            case R.id.Corki:
            mediaplayer= MediaPlayer.create(this,R.raw.corki);
                     break;
            case R.id.darius:
            mediaplayer= MediaPlayer.create(this,R.raw.darius);
                     break;
            case R.id.diana:
            mediaplayer= MediaPlayer.create(this,R.raw.diana);
                     break;
            case R.id.draven:
            mediaplayer= MediaPlayer.create(this,R.raw.draven);
                     break;
            case R.id.elise:
            mediaplayer= MediaPlayer.create(this,R.raw.elise);
                     break;
            case R.id.eve:
            mediaplayer= MediaPlayer.create(this,R.raw.evelynn);
                     break;
            case R.id.ezrael:
            mediaplayer= MediaPlayer.create(this,R.raw.ezreal);
                     break;
            case R.id.fiddle:
            mediaplayer= MediaPlayer.create(this,R.raw.fiddlesticks);
                     break;
            case R.id.fiora:
            mediaplayer= MediaPlayer.create(this,R.raw.fiora);
                     break;
            case R.id.fizz:
            mediaplayer= MediaPlayer.create(this,R.raw.fizz);
                     break;
            case R.id.galio:
            mediaplayer= MediaPlayer.create(this,R.raw.galio);
                     break;
            case R.id.garen:
            mediaplayer= MediaPlayer.create(this,R.raw.garen);
                     break;
            case R.id.gp:
            mediaplayer= MediaPlayer.create(this,R.raw.gangplank);
                     break;
            case R.id.gragas:
            mediaplayer= MediaPlayer.create(this,R.raw.gragas);
                     break;
            case R.id.graves:
            mediaplayer= MediaPlayer.create(this,R.raw.graves);
                     break;
            case R.id.hecarim:
            mediaplayer= MediaPlayer.create(this,R.raw.hecarim);
                     break;
            case R.id.heimer:
            mediaplayer= MediaPlayer.create(this,R.raw.heimerdinger);
                     break;
            case R.id.thresh:
            mediaplayer= MediaPlayer.create(this,R.raw.thresh);
                     break;         

        }
        mediaplayer.start();
        //setContentView(viewer);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          if(mediaplayer.isPlaying())
          {
              mediaplayer.release();
          }
          }

      @Override
      protected void onDestroy() {
          mediaplayer.release();
          super.onDestroy();
      }
}
4

2 回答 2

1

为什么不将所有按钮设置为 enable(false) 直到播放完成?

在 onCreate 中:

ArrayList<Button> bList=new ArrayList<Button>();

对于每个按钮:

final Button button_1 = (Button) findViewById(R.id.alistar);
bList.add(button_1);
button_1.setOnClickListener(this);
final Button button_2 =(Button) findViewById(R.id.ahri);
button_2.setOnClickListener(this);
button_2.setOnClickListener(this);
....

在点击:

 public void onClick(View v) {
 for(Button b:bList){
 b.setEnabled(false);
 }

最后按照 Marcin S. 的建议:

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
for(Button b:bList){
   b.setEnabled(true);
   }
  }
 });
于 2013-03-05T15:26:12.383 回答
0

在您将启用所有按钮的 mediaPlayer 对象上设置 setOnCompletionListener():

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
    // ENABLE THE BUTTONS HERE
        }
    });
}
于 2013-03-05T15:30:14.260 回答