我的音频流应用程序遇到了一个非常奇怪的CPU使用错误。
当应用程序处于前台并播放音乐时,设备的总CPU使用率仅为15%左右。但是,只要将应用程序放在后台,CPU使用率就会达到100%并保持不变。
其中大约40%来自应用程序进程本身,大约其他60%来自SpringBoard进程,显然处理所有Core Animation调用(虽然我没有明确使用Core Animation,但我认为它还处理其他与UI相关的活动)。此外,根据“CPU活动”工具,应用程序进程本身的大部分额外CPU使用量都属于“图形”类别,但我确实看到“音频处理”和(奇怪的)“前景”增加应用活动“类别。
如何找出导致此问题的原因?乐器告诉我正在发生什么,但为什么正在发生。
答案 0 :(得分:1)
这太奇怪了。但是,如果没有任何代码,就很难说出任何事情。纯粹基于推测,我会说你在不知道背景的情况下更新UI。也许在-(void)applicationDidEnterBackground
上进行动画调用?给我们一些工作!我现在对此非常好奇:)
答案 1 :(得分:0)
神秘解决了!
当然我错过了显而易见的,感谢Dylan G指出我正确的方向。我正在运行一个循环来检查剩余的后台时间。我根本没有睡觉循环线程所以它显然只是全速运行吸收所有CPU功率。
我不确定为什么它看起来像是图形相关并涉及SpringBoard进程,但是当我在循环结束时添加sleep(1)
时,CPU使用率不再上升应用程序被放置在后台。奇怪的是,我没有在该循环中调用任何UI或图形相关的方法,只是调用[[UIApplication sharedApplication] backgroundTimeRemaining]
并访问一些整数和bool属性。
在将它放到后台后,第二个左右的CPU仍然会快速飙升,而SpringBoard也会出现高峰,但只是一秒钟,然后CPU使用率会下降到与应用程序运行时相同的水平。