0

soundPool 后如何清理?应用程序被杀死后,我的循环声音仍在播放

// 我的 onStop() onPause() 是相同的声音一直持续到重新启动。

public void onStop(){
    soundPool.stop(curs);   
    }

  public int playSound(int sound, int loop) {
   if (curs != sound)
   {

       curs = sound;   
       AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
       float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
       float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
       float volume = streamVolumeCurrent / streamVolumeMax;  
       return soundPool.play(soundsMap.get(sound), volume, volume, 1, loop, 1);

       }
       return curs;
 }     
 // is how I call it in a runnable class

   curs=playSound(cur,-1);
4

1 回答 1

0

当你打电话时,你永远不会停止你的旧声音playSound。如果playSound被多次调用,您将播放两种声音,退出时,您只会取消其中一种。一种解决方案是保留您启动的所有声音 ID。或者,如果您一次只需要一个声音,请在开始下一个声音之前更改您的代码以取消当前声音。

if (curs != sound)
{
  soundPool.stop(curs); 
  curs = sound;   
  // ... 
}
于 2013-01-30T02:35:25.150 回答