如何在android中发布Soundpool
当我使用条形码扫描机架时,我实现了一个单一的soundpool类,当继续扫描时,应用程序自动关闭。错误是“无法从地块读取输入通道文件描述符” 此代码为成功警报,我尝试清理声音池释放,声音未被听到。有谁能建议我,在播放声音后如何释放soundpool如何在android中发布Soundpool,android,soundpool,Android,Soundpool,当我使用条形码扫描机架时,我实现了一个单一的soundpool类,当继续扫描时,应用程序自动关闭。错误是“无法从地块读取输入通道文件描述符” 此代码为成功警报,我尝试清理声音池释放,声音未被听到。有谁能建议我,在播放声音后如何释放soundpool public void cleanupSound() { if (mSPool != null) { mSPool.release(); // mSPool=null; // mAudioMana
public void cleanupSound() {
if (mSPool != null) {
mSPool.release();
// mSPool=null;
// mAudioManager.unloadSoundEffects();
// mInstance=null;
}
}
问题有两个方面:
1) 为什么我的声音没有播放?
2) 如何正确释放声音池
对于1-声音池播放是异步的。您正在执行:“播放然后释放”,但您需要执行“播放然后等待播放完成,然后释放”
对于2-由于1,您不应该释放一个声音池,直到播放完成。不幸的是,没有办法要求声音池在播放结束后回调。我看到了两种解决方案:
- 如果您知道播放示例(X ms)需要多长时间,那么可以使用
处理程序中的
为您的postDelayed
版本安排X ms的播放时间
- 确定真正重要的问题是在应用程序完成时发布声音池。因此,监视应用程序中的所有退出点,并确保每次都释放声音池。如果有人在您播放声音时关闭应用程序,您可能会突然切断该效果,但这可能是应用程序退出时的正确行为李>
public void cleanupSound() {
if (mSPool != null) {
mSPool.release();
// mSPool=null;
// mAudioManager.unloadSoundEffects();
// mInstance=null;
}
}