2014-05-12 14 views
0

我正在开发一个Android应用程序,它使用libpd运行大量密集音频任务。 Libpd的音频线程的优先级为Process.THREAD_PRIORITY_URGENT_AUDIO。Android中推荐的应用程序CPU负载

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

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

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

+0

使用较大的缓冲区 - 它不会显着减少负载,但它会减少高负载导致退出的机会,因为计划音频计算的时间不那么关键。 –

回答

0

好吧,我不是100%对Android的内核是如何做的OS任务分配,但是我可以告诉你确定一个最大的CPU负载(100%或任何它可能)并不是真的可以实现的。 task scheduling有几种方式,但是为了保证任务按时完成,大多数人建议您保持CPU的最大值的70-80%。

这似乎不是一个主要问题,因为您只使用30%,但请记住UI线程需要运行,正常的后台应用程序正在运行(SMS,BBM,WhatsApp,Facebook等),你现在已经运行了另一个可能也是密集型的应用程序。操作系统将决定什么时候执行,并且虽然认为用户的优先级,操作系统将始终优先。当应用程序启动时,或者有人在敲回家或后退按钮时,您的退出可能会出现。这只是野兽的本质,智能手机虽然变得更好,但在处理能力方面仍然相对较低。

我知道这并不完全帮助你,因为我不知道如何重写/增加上述OS任务的优先级(如果它甚至有可能),但我希望它解释了为什么会这样。如果你有时间阅读它们,内核是非常有趣的。

相关问题