0

我正在开发一个使用 libpd 运行大量密集音频任务的 Android 应用程序。Libpd 的音频线程具有优先级 Process.THREAD_PRIORITY_URGENT_AUDIO。

三星 Galaxy S3 的 CPU 负载始终保持在 20% 到 30% 之间。这对我来说似乎是合理的,但是,当音频服务在后台运行且 CPU 负载约为 30% 时打开另一个应用程序会导致大量音频丢失。

有人可以解释这种行为吗?我认为像 S3 这样的四核手机的最大负载为 400%(在 adb shell 中使用“top”显示)。因此,我不明白为什么像libpd的音频线程这样高优先级的线程在只使用30%的CPU时却得不到足够的CPU资源。

任何建议将不胜感激,谢谢;)

4

1 回答 1

0

好吧,我不是 100% 确定 Android 的内核如何执行其操作系统任务分配,但是我可以告诉你,最大 CPU 负载(100% 或任何可能)并不是真正可以实现的。有多种任务调度方法,但大多数建议您保持 CPU 最大值的 70-80%,以保证任务按时完成。

这似乎不是一个主要问题,因为您只使用了 30%,但请记住 UI 线程需要运行,正常的后台应用程序正在运行(SMS、BBM、Whatsapp、Facebook 等)并且您有现在运行另一个可能也很密集的应用程序。操作系统将决定何时执行什么,尽管考虑了用户优先级,但操作系统将始终具有优先权。当应用程序启动时,或者有人敲击主页或返回按钮时,您的辍学可能会出现。这只是野兽的本质,智能手机虽然越来越好,但在处理能力方面仍然相对较低。

我知道这并不能完全帮助您,因为我不确定如何覆盖/提高操作系统任务之上的优先级(如果可能的话),但我确实希望它能解释为什么会发生这种情况。如果您有时间阅读它们,内核会非常有趣。

于 2014-05-12T19:13:52.873 回答