SoundPool.load()是否设计为异步加载?

时间:2015-03-22 19:27:30

标签: android multithreading soundpool

似乎有几位用户注意到SoundPool.load()因发布Lollipop(hereherehere而感到退步:

它的要点是许多开发人员,包括我自己,以前在UI线程中调用了SoundPool.load(),这在早期版本的Android中运行良好,但是从Lollipop开始,似乎有一个延迟。使用SoundPool.load()加载小声音时命令十分之几秒。

我没有在Android文档中找到任何暗示SoundPool.load()会异步加载声音的引用,但是,早期版本的Android中的行为和OnLoadCompleteListener的存在意味着这一点(否则听众会有什么意义?)

我的问题是:SoundPool.load()是否应该异步加载声音,我可以按照这个设计,并期望这个被修复,或者我应该开始将此代码放在AsyncTask或其他背景线程中机制?

2 个答案:

答案 0 :(得分:1)

如果您有任何VCS控件,则应修补或创建临时修订,并在修复错误时恢复您的更改。

我不会保持原样,即使这个问题出在谷歌方面,也不会冒着用户体验的风险,修补它并在修复后将其还原。

答案 1 :(得分:1)

异步并不一定意味着在后台线程上运行

CleverAgent显然是异步运行的。问题是它是在调用线程(通常是主线程)上运行,还是在单独的线程上运行。

load()调用本地_load()方法,该方法等同于android_media_SoundPool.cpp中的android_media_SoundPool_load_FD

遵循从那里到SoundPool.cppSoundPool.hSoundPoolThread的逻辑,尽管我不熟悉C ++,但它似乎很清楚它在a上执行实际工作背景线程。

在某些设备上加载声音需要很长时间(在一个小型LGE tracfone上加载20秒以上,但在更现代的Samsung S6上加载不到1秒),因此如果向用户显示进度动画可能是合适的。声音无法提前加载。