【问题标题】:Weird CPU usage problem when app is backgrounded应用程序后台运行时出现奇怪的 CPU 使用问题
【发布时间】:2011-10-25 11:01:51
【问题描述】:

我的音频流应用程序遇到了一个非常奇怪的 CPU 使用错误。

当应用在前台播放音乐时,总的设备 CPU 使用率只有 15% 左右。但是,一旦将应用程序置于后台,CPU 使用率就会飙升至 100% 并保持在那里。

其中大约 40% 来自应用程序进程本身,大约另外 60% 来自 SpringBoard 进程,它显然处理所有核心动画调用(虽然我没有明确使用核心动画,但我假设它还处理其他与 UI 相关的活动)。此外,根据“CPU Activity”工具,来自应用程序进程本身的大部分额外 CPU 使用量都属于“图形”类别,尽管我确实看到“音频处理”和(奇怪的是)“前台”都有增加应用活动”类别。

如何找出导致此问题的原因? Instruments 从高层次上告诉我发生了什么,而不是为什么会发生。

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    这太奇怪了。但是,如果没有任何代码,就很难说任何事情。纯粹基于推测,我会说您在后台不知道它的情况下更新 UI。也许是对-(void)applicationDidEnterBackground 的动画调用?给我们更多的工作!我现在真的很好奇这个:)

    【讨论】:

      【解决方案2】:

      谜团解开了!

      当然,我错过了显而易见的事情,感谢 Dylan G 为我指明了正确的方向。我正在运行一个循环来检查剩余的后台时间。我根本没有休眠循环线程,所以它显然只是在全速运行,消耗所有 CPU 功率。

      我不确定为什么它看起来与图形相关并涉及 SpringBoard 进程,但是当我在循环结束时添加 sleep(1) 时,当应用程序运行时 CPU 使用率不再上升放置在背景中。奇怪的是,我没有在该循环中调用任何 UI 或图形相关方法,只是调用 [[UIApplication sharedApplication] backgroundTimeRemaining] 并访问一些整数和布尔属性。

      在将其置于后台后的一秒左右,CPU 仍然会出现快速峰值,SpringBoard 也会出现峰值,但仅仅一秒,CPU 使用率就会下降到应用程序运行时的水平。

      【讨论】:

      • 我很高兴你知道了!我知道它必须是简单的;)
      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多