如何正确释放SoundPool对象?

时间:2016-04-11 00:57:37

标签: java android button release soundpool

以下代码播放随机声音。我正试图释放它,因为我不再需要按钮来播放任何其他内容,但是当我运行应用程序时,该按钮根本不会播放任何声音。

public class actibida extends AppCompatActivity {
SoundPool soundPool;
Button button;
boolean loaded = false;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_actibida);

    soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            loaded = true;
        }
    });

    //I have a total of four sounds
    final int[] sound = new int[4];
    sound[0] = soundPool.load(actibida.this, R.raw.el, 1);
    sound[1] = soundPool.load(actibida.this, R.raw.guau, 1);
    sound[2] = soundPool.load(actibida.this, R.raw.miau, 1);
    sound[3] = soundPool.load(actibida.this, R.raw.quack, 1);

    final Random r = new Random();

    button = (Button) this.findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View button) {

            final Random r = new Random();
            int Low = 0;
            int High = 3;
            int rndm = r.nextInt(High - Low) + Low;
            soundPool.play(sound[r.nextInt(4)], 1.0f, 1.0f, 0, 0, 1.0f);


        }

    });
    soundPool.release();
        }
}

有人可以教我如何正确调用.release()吗?

P.S。如果我要在应用程序中播放其他声音,我应该使用不同的SoundPool类吗?或者我应该释放它并再次加载它?事情是我甚至无法在第一时间发布,所以我无法分辨。

1 个答案:

答案 0 :(得分:0)

在声音播放完毕之前,您将释放SoundPool。事实上,你在播放开始的那一刻就释放了它。 play()方法不等待声音完成 - 播放是异步的。此外,没有办法找出播放何时结束。

如果您将来要使用相同的声音池播放,您可以简单地将SoundPool设置为某种单例或将其存储在可以重复使用的地方。