android SoundPool调用stop方法使用注意问题
来源:互联网 发布:yum w3m 编辑:程序博客网 时间:2024/05/16 00:35
在项目中需要播放很短而不一样的铃声,在网上找了很多资料,对于比较小的铃声都推荐是使用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方法使用注意问题
- android SoundPool调用stop方法使用注意问题
- android SoundPool调用pause stop方法使用注意问题
- android SoundPool调用pause stop方法使用注意问题
- Android 使用MediaRecorder录音调用stop()方法的时候报错
- android SoundPool 的使用
- android SoundPool 的使用
- Android SoundPool使用模板
- android soundpool的使用
- android mediaplay的使用中,stop和start的调用问题
- php方法调用注意问题
- android 中的使用Rigtone,Soundpool和Mediaplayer遇到的问题
- Android中SoundPool的使用
- android中soundpool的使用
- Android中SoundPool的使用
- Android中SoundPool的使用
- Android中SoundPool的使用
- android----使用SoundPool播放声音
- 在VM的window2003上用plsqldev(sqlplus)远程连接window7上的Oracle11gR1服务器总结
- 自动化专家
- 在Android系统中Service的远程调用
- 该认真找工作了——北邮双选会感想
- python 多线程编程(四)
- android SoundPool调用stop方法使用注意问题
- HTML5表单新特征简介与举例
- jsp基础——JDBC(2)@Statement
- Oracle session连接数和inactive的问题记录
- php 实现主从库
- 也谈JavaScript的闭包
- 三十分钟掌握STL
- nginx 域名rewrite跳转
- Update 视图“ORA-01733: 此处不允许虚拟列” 分享