2016-02-26 140 views
2

当我点击按钮在我的应用程序上播放声音时,但保持点击一会儿不再播放。也许这是内存问题?你能解决我的问题吗?这里通过的Soundpool实现播放声音:当我点击按钮,我叫玩儿法:和播放方法的工作后台线程SoundPool在点击几次后不会播放声音

private void play(int resId) { 
    soundPool = buildBeforeAPI21();//TODO: refactor with deprecated constructor 
    soundPool.load(activity, Integer.parseInt(resId), 1); 
} 

public SoundPool buildBeforeAPI21() { 
    if (soundPool == null) { 
     soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0); 
     soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { 
      @Override 
      public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { 
       if (status == 0) { 
        soundPool.play(sampleId, 1.0f, 1.0f, 1, 0, 1.0f); 
       } 
      } 
     }); 
    } 
    return soundPool; 
} 
+0

你的点击处理程序在哪里?你如何触发声音播放?你每次都在建造一个新的SoundPool吗?如果是这样,我会建议保留一个实例,并在需要时重复使用它来播放音效,而不是构建一个新实例。 – kcoppock

+0

是的,我只使用一个咒诅 – nAkhmedov

回答

1

不要创建每次点击一个新的Soundpool。这非常浪费。做到这一点,而不是:

1)创建的Soundpool只有一次 2)所有你要播放的声音,只有一次 3)等待所有的声音加载 4)只需拨打soundPool.play加载它( )每次点击。

+0

你可以给一个例子加载所有的声音只是一次没有distrub用户界面? – nAkhmedov

0

也许这个答案来得太晚;但我们走了。问题是在该行

soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0); 

即“2”号是INT maxStreams的文档“这个的Soundpool对象同时流的最大数”下面(你可以深入这个here )。例如,现在改变它并将其设置为10,然后重试。之后,你可以根据你的意愿调整它。所以:

 soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 

希望这有助于(如果仍然有必要)。