似乎有几位用户注意到SoundPool.load()
因发布Lollipop(here,here和here而感到退步:
它的要点是许多开发人员,包括我自己,以前在UI线程中调用了SoundPool.load()
,这在早期版本的Android中运行良好,但是从Lollipop开始,似乎有一个延迟。使用SoundPool.load()
加载小声音时命令十分之几秒。
我没有在Android文档中找到任何暗示SoundPool.load()
会异步加载声音的引用,但是,早期版本的Android中的行为和OnLoadCompleteListener
的存在意味着这一点(否则听众会有什么意义?)
我的问题是:SoundPool.load()
是否应该异步加载声音,我可以按照这个设计,并期望这个被修复,或者我应该开始将此代码放在AsyncTask或其他背景线程中机制?
答案 0 :(得分:1)
如果您有任何VCS控件,则应修补或创建临时修订,并在修复错误时恢复您的更改。
我不会保持原样,即使这个问题出在谷歌方面,也不会冒着用户体验的风险,修补它并在修复后将其还原。
答案 1 :(得分:1)
异步并不一定意味着在后台线程上运行。
CleverAgent
显然是异步运行的。问题是它是在调用线程(通常是主线程)上运行,还是在单独的线程上运行。
load()调用本地_load()方法,该方法等同于android_media_SoundPool.cpp中的android_media_SoundPool_load_FD
遵循从那里到SoundPool.cpp,SoundPool.h和SoundPoolThread的逻辑,尽管我不熟悉C ++,但它似乎很清楚它在a上执行实际工作背景线程。
在某些设备上加载声音需要很长时间(在一个小型LGE tracfone上加载20秒以上,但在更现代的Samsung S6上加载不到1秒),因此如果向用户显示进度动画可能是合适的。声音无法提前加载。