android SoundPool调用stop方法使用注意问题

在项目中需要播放很短而不一样的铃声,在网上找了很多资料,,对于比较小的铃声都推荐是使用SoundPool来实现,因为SoundPool有以下优点:

1.SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。2.SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。Android开发网建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。3.SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。

初始化SoundPool:

mSP = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);mSPMap = new HashMap<Integer, Integer>();mSPMap.put(1, mSP.load(this, R.raw.buzz4, 1));mSPMap.put(2, mSP.load(this, R.raw.alarm1, 1));mAudio = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);播放:

private void playSound(int pSound, int pNumber){mCurrentVolume = AntiLostDataSource.getAlarmVolume(this);if(mCurrentVolume == 0){mCurrentVolume = mAudio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);AntiLostDataSource.setAlarmVolume(this, mCurrentVolume);}mSP.play(mSPMap.get(pSound), mCurrentVolume, mCurrentVolume, 1, pNumber, 1);}停止:

private void stopSound(){mSP.stop(2);}因为我每次停止的流对应的ID是2,所以我就这么写了,点击播放然后点击停止,都没有问题,但第二次点击播放然后点击停止后,一直在播放,不能停止,找了很长时间看是否是其他变量导致的没有执行这个stop方法,但通过log发现这句代码执行了,我也不知道为啥,找了很久最后看了下doc的stop方法,原来这个流对应的ID是需要play方法返回的,后来我用mPresentPlayId存储play返回的流ID,在stop时将流ID使用mPresentPlayId来替换就没问题了,后来输出了下mPresentPlayId的值,发现这个值第一次是2.第二次是4,以后使用这个方法一定要注意这个问题。

与一个赏心悦目的人错肩,真真实实的活着,也就够了。

android SoundPool调用stop方法使用注意问题

相关文章:

你感兴趣的文章:

标签云: