我正在开发一个使用libpd运行大量密集音频任务的Android应用程序。 Libpd的音频线程具有优先级Process.THREAD_PRIORITY_URGENT_AUDIO。
三星Galaxy S3上的CPU负载始终保持在20%到30%之间。这对我来说似乎是合理的,但是,当音频服务在后台运行时,打开另一个应用程序,大约30%的CPU负载会导致大量的音频丢失。
有人可以解释这种行为吗?我认为像S3这样的四核手机的最大负载是400%(使用" top"在adb shell中显示)。因此,我不明白为什么这样一个高度优先的Thread作为libpd的音频线程在仅使用30%的CPU时没有获得足够的CPU资源。
非常感谢任何建议,谢谢;)
答案 0 :(得分:0)
好吧,我不是100%肯定Android内核如何执行操作系统任务分配,但是我可以告诉你最大CPU负载(100%或者它可能是什么)并不是真的可以实现的。 task scheduling有几种方法,但大多数人建议您保留70-80%的CPU最大值,以保证任务按时完成。
这似乎并不是一个主要的问题,因为你只使用了30%,但请记住,UI线程需要运行,正常的后台应用程序正在运行(SMS,BBM,Whatsapp,Facebook,等等,你现在运行另一个也可能是密集的应用程序。操作系统将决定何时执行,虽然考虑用户优先级,但操作系统始终优先。当应用程序启动时,或者当有人敲击主页或后退按钮时,您的辍学可能会出现。这只是野兽的本质,智能手机虽然越来越好,但在处理能力方面仍然相对较低。
我知道这并不能完全帮助你,因为我不知道如何覆盖/增加优先于OS任务的优先级(如果它甚至可能),但我希望它能解释为什么会发生这种情况。如果你有时间阅读它们,内核就会非常有趣。