似乎有几个用户已经注意到 SoundPool.load()
随着 Lollipop 的发布( here 、 here 和 here )而有所退步:
其要点是,包括我自己在内的许多开发人员之前都曾调用过 SoundPool.load()
在 UI 线程中,该线程在 Android 的早期版本中运行良好,但从 Lollipop 开始,使用 SoundPool.load()
加载小声音时似乎存在十分之几秒的延迟。 .
我在 Android 文档中没有找到任何表明 SoundPool.load()
的引用会异步加载声音,但是,早期版本的 Android 中的行为以及 OnLoadCompleteListener
的存在会暗示这一点(否则对听众来说还有什么意义?)
我的问题是:是SoundPool.load()
应该异步加载声音,我可以按照这个设计,并期望这个问题得到修复,还是应该开始将此代码放入 AsyncTask 或其他后台线程机制中?
最佳答案
异步并不一定意味着在后台线程上运行。
SoundPool.load()
显然是异步运行的。问题是它是在调用线程(通常是主线程)上运行,还是在单独的线程上运行。
load() 调用 native _load() 方法,该方法相当于 android_media_SoundPool.cpp 中的 android_media_SoundPool_load_FD
按照逻辑从那里开始进入 SoundPool.cpp , SoundPool.h ,和SoundPoolThread ,虽然我不太精通 C++,但似乎很清楚它在后台线程上执行实际工作。
在某些设备上加载声音确实需要很长时间(在小型 LGE tracfone 上需要 20 秒以上,但在更现代的三星 S6 上则不到 1 秒),因此向用户显示进度动画可能是合适的,如果声音无法提前加载。
关于android - SoundPool.load() 是否设计为异步加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198850/