1

我正在尝试制作小应用程序...我在应用程序中使用了不同的声音。我很困惑我应该在哪里使用方法release() 来释放资源。

你能看看我的代码,让我知道我是否朝着正确的方向前进:

import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SpellToNumbers extends Activity implements OnClickListener {

    Button btn_next;
    Button btn_restart;
    Button btn_previous;
    TextView tvSTN, tvSTNN;
    int a = 0;
    RelativeLayout stnXML;

    MediaPlayer vone,vtwo,vthree,vfour,vfive,vsix,vseven,veight,vnine,vten;



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


        MediaPlayer onStart = MediaPlayer.create(SpellToNumbers.this,  R.raw.one110 );
        onStart.start();


    tvSTN = (TextView) findViewById(R.id.tvSTN);
    tvSTNN = (TextView) findViewById(R.id.tvSTNN);
    stnXML = (RelativeLayout) findViewById(R.id.stnXML);
    btn_next = (Button) findViewById(R.id.btnNextSTN);
    btn_next.setOnClickListener(this);
    btn_restart = (Button) findViewById(R.id.btnRestartSTN);
    btn_restart.setOnClickListener(this);
    btn_previous = (Button) findViewById(R.id.btnPreviousSTN);
    btn_previous.setOnClickListener(this);


    vone   = MediaPlayer.create(this,R.raw.one110); 
    vtwo   = MediaPlayer.create(this,R.raw.two210);
    vthree = MediaPlayer.create(this,R.raw.three310);
    vfour  = MediaPlayer.create(this,R.raw.four410);
    vfive  = MediaPlayer.create(this,R.raw.five510);
    vsix   = MediaPlayer.create(this,R.raw.six610);
    vseven = MediaPlayer.create(this,R.raw.seven710);
    veight = MediaPlayer.create(this,R.raw.eight810);
    vnine  = MediaPlayer.create(this,R.raw.nine910);
    vten   = MediaPlayer.create(this,R.raw.ten1010);

    }//onCreate ends




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;

    }//onCreateOptionMenu ends



    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnRestartSTN:
            restart();

            break;

        case R.id.btnNextSTN:
            next();

            break;

        case R.id.btnPreviousSTN:

            previous();

            break;
        }//switch ends

    }//onClick ends




    private void restart() {
        a = 0;
        setPage();
    }

    private void previous() {
        if (a > 0) {
            a--;
        }
        setPage();
    }

    private void next() {
        if (a < 9) {
            a++;
        }
        setPage();
    }




            private void setPage() {
                    if (a == 0) {
                        tvSTNN.setText("1");
                        tvSTN.setText("ONE");
                        tvSTNN.setTextColor(Color.parseColor("#F2416B"));
                        tvSTN.setTextColor(Color.parseColor("#F2416B"));
                        stnXML.setBackgroundColor(Color.parseColor("#3FD161"));
                        vone.start();
                        }
                    if (a == 1)
                        {
                        tvSTNN.setText("2");
                        tvSTNN.setTextColor(Color.parseColor("#F0EFDA"));
                        tvSTN.setText("TWO");
                        tvSTN.setTextColor(Color.parseColor("#F0EFDA"));
                        stnXML.setBackgroundColor(Color.parseColor("#0A0EF5"));
                        vtwo.start();
                         }

                    else if (a == 2)
                        {                       
                        tvSTNN.setText("3");
                        tvSTNN.setTextColor(Color.parseColor("#F5F507"));
                        tvSTN.setText("THREE");
                        tvSTN.setTextColor(Color.parseColor("#F5F507"));
                        stnXML.setBackgroundColor(Color.parseColor("#D15BE3"));
                        vthree.start();
                        }

                    else if (a == 3)
                        {                       
                        tvSTNN.setText("4");
                        tvSTNN.setTextColor(Color.parseColor("#0AF5DD"));
                        tvSTN.setText("FOUR");
                        tvSTN.setTextColor(Color.parseColor("#0AF5DD"));
                        stnXML.setBackgroundColor(Color.parseColor("#F50A0A"));
                        vfour.start();
                        }

                    else if (a == 4)
                        {                       
                        tvSTNN.setText("5");
                        tvSTNN.setTextColor(Color.parseColor("#171117"));
                        tvSTN.setText("FIVE");
                        tvSTN.setTextColor(Color.parseColor("#171117"));
                        stnXML.setBackgroundColor(Color.parseColor("#0AF5DD"));
                        vfive.start();
                        }

                    else if (a == 5)
                        {                       
                        tvSTNN.setText("6");
                        tvSTNN.setTextColor(Color.parseColor("#072BF5"));
                        tvSTN.setText("SIX");
                        tvSTN.setTextColor(Color.parseColor("#072BF5"));
                        stnXML.setBackgroundColor(Color.parseColor("#0AF525"));
                        vsix.start();
                        }

                    else if (a == 6)
                        {                       
                        tvSTNN.setText("7");
                        tvSTNN.setTextColor(Color.parseColor("#8F0AF5"));
                        tvSTN.setText("SEVEN");
                        tvSTN.setTextColor(Color.parseColor("#8F0AF5"));
                        stnXML.setBackgroundColor(Color.parseColor("#F5F10A"));
                        vseven.start();
                        }

                    else if (a == 7)
                        {                       
                        tvSTNN.setText("8");
                        tvSTNN.setTextColor(Color.parseColor("#37F507"));
                        tvSTN.setText("EIGHT");
                        tvSTN.setTextColor(Color.parseColor("#37F507"));
                        stnXML.setBackgroundColor(Color.parseColor("#9C2497"));
                        veight.start();
                        }

                    else if (a == 8)
                        {                       
                        tvSTNN.setText("9");
                        tvSTNN.setTextColor(Color.parseColor("#F50707"));
                        tvSTN.setText("NINE");
                        tvSTN.setTextColor(Color.parseColor("#F50707"));
                        stnXML.setBackgroundColor(Color.parseColor("#BAF50A"));
                        vnine.start();
                        }

                    else if (a == 9)
                        {
                        tvSTNN.setText("10");
                        tvSTNN.setTextColor(Color.parseColor("#0ACAF5"));
                        tvSTN.setText("TEN");
                        tvSTN.setTextColor(Color.parseColor("#0ACAF5"));
                        stnXML.setBackgroundColor(Color.parseColor("#F5700A"));
                        vten.start();
                        tvSTN.setClickable(false);
                        }

        }//setPage Method ends

}//end of class
4

3 回答 3

0

我很困惑我应该在哪里使用方法 release();

如果您只使用MediaPlayer播放一首歌曲,则应将其放入onPause()

@Override
public void onPause()
{
     onStart.release();
     super.onPause();
}

Activity如果另一个进入前台或被Activity销毁,这将释放资源。如果您在不同的地方使用它,Activity那么您可能希望在每次完成时释放资源,start()然后再次调用它。

于 2013-10-25T19:38:24.283 回答
0

如果创建成功,onResume() 方法会启动媒体播放器

onPause() 方法暂停 MediaPlayer。如果要终止活动,请停止 MediaPlayer,然后释放其所有资源。

@Override
protected void onResume() {
  super.onResume();
   if (mediaPlayer != null) {
     mediaPlayer.start();
   }
}

protected void onPause() {
  super.onPause();
   if (mediaPlayer != null) {
     mediaPlayer.pause();
  if (isFinishing()) {
     mediaPlayer.stop();
     mediaPlayer.release();
   }
}
于 2013-10-25T19:43:31.187 回答
0

检查您的代码后,我认为最好使用soundpool 而不是 Mediaplayer

当您的应用程序要返回 (onPause()) 和 onResume() 时,您可以通过任何方式从媒体播放器释放资源,您可以将资源重新分配给媒体播放器。

@Override
public void onPause()
{
     onStart.release();
     super.onPause();
}

@Override
public void onResume()
{
     vone   = MediaPlayer.create(this,R.raw.one110); 
     vtwo   = MediaPlayer.create(this,R.raw.two210);
     vthree = MediaPlayer.create(this,R.raw.three310);
     vfour  = MediaPlayer.create(this,R.raw.four410);
     vfive  = MediaPlayer.create(this,R.raw.five510);
     vsix   = MediaPlayer.create(this,R.raw.six610);
     vseven = MediaPlayer.create(this,R.raw.seven710);
     veight = MediaPlayer.create(this,R.raw.eight810);
     vnine  = MediaPlayer.create(this,R.raw.nine910);
     vten   = MediaPlayer.create(this,R.raw.ten1010);
     super.onResume();
}
于 2013-10-25T19:51:04.500 回答