Un extraño problema de uso de la CPU cuando la aplicación está en segundo plano

Estoy experimentando un error de uso de CPU muy extraño con mi aplicación de transmisión de audio.

Cuando la aplicación está en primer plano y reproduce música, el uso total de la CPU del dispositivo es solo del 15%. Sin embargo, tan pronto como la aplicación se pone en segundo plano, el uso de CPU aumenta al 100% y permanece allí.

Alnetworkingedor del 40% de esto proviene del process de la aplicación en sí, y aproximadamente el 60% proviene del process SpringBoard, que al parecer maneja todas las llamadas de Core Animation (aunque no estoy explícitamente usando Core Animation, supongo que también maneja otra actividad relacionada con la interfaz de usuario). Además, de acuerdo con el instrumento "Actividad de la CPU", la mayor parte del uso de la CPU adicional del process de la aplicación cae en la categoría de "charts", aunque veo un aumento en el "procesamiento de audio" y (extrañamente) el "primer plano actividad de la aplicación ".

¿Cómo puedo averiguar qué está causando este problema? Instruments me está diciendo a nivel alto lo que está sucediendo, pero no por qué está sucediendo.

Eso es extremadamente extraño. Sin embargo, sin ningún código, es realmente difícil decir algo sobre cualquier cosa. Basado puramente en la especulación, diría que estás actualizando la interfaz de usuario sin saberlo en el background. Tal vez una llamada de animation -(void)applicationDidEnterBackground ? ¡Danos más para trabajar! Tengo mucha curiosidad por esto ahora 🙂

¡Misterio resuelto!

Por supuesto, me perdí lo obvio, gracias a Dylan G por señalarme en la dirección correcta. Estaba ejecutando un ciclo para comprobar el time de background restante. No estaba durmiendo el hilo de bucle en absoluto, por lo que aparentemente estaba funcionando a toda velocidad absorbiendo toda la potencia de la CPU.

No estoy seguro de por qué parecía que estuviera relacionado con charts e involucrara el process de SpringBoard, pero tan pronto como agregué un sleep(1) al final del ciclo, el uso de la CPU ya no aumentó cuando la aplicación se colocó en el background. Lo extraño es que no estoy llamando a ninguna interfaz de usuario ni a ningún método relacionado con charts en ese ciclo, solo llamadas a [[UIApplication shanetworkingApplication] backgroundTimeRemaining] y accediendo a algunas properties enteras y bool.

Todavía hay un rápido aumento de CPU durante un segundo más o less después de que se coloca en segundo plano, y SpringBoard también aumenta, pero solo por un segundo, luego el uso de la CPU vuelve al mismo time que cuando la aplicación se está ejecutando.