2015-11-26 3 views
2

Je travaille sur la lecture audio en arrière-plan de mon application. Mais certains utilisateurs m'ont prévenu d'un bug étrange. Après 1 heure ou plus de jeu en arrière-plan, l'application est supprimée par iOS et vous devez la relancer. Généralement, cela se produit avec une mauvaise connexion Internet, lorsque l'application doit créer une tâche d'arrière-plan très souvent et l'utiliser jusqu'à ce que suffisamment de données seront téléchargées pour relancer la lecture.iOS CPU_FATAL 0% en arrière-plan

Je connais la limite de temps pour les tâches en arrière-plan et ce n'est pas un problème. Voici une partie du journal de plantage de l'appareil de l'utilisateur:

enter image description here lignes importantes:

Exception Type: EXC_RESOURCE 
Exception Subtype: CPU_FATAL 
Exception Message: (Limit 80%) Observed 0% over 60 sec 
Triggered by Thread: 0 

Le plus étrange est la troisième ligne. Pourquoi est-ce une exception, si 0% est inférieur à la limite de 80%? En symbolisant la trace de la pile du Thread 0 (c'est le thread principal), j'ai trouvé que c'est arrivé à la méthode - [NSFileManager fileExistsAtPath:]. Auparavant, il est arrivé sur la méthode + [UIImage imageWithContentsOfFile:]. Alors qu'est-ce qui pourrait figer l'accès au système de fichiers en arrière-plan sur iOS?

aussi:

  • Il arrive lorsque l'application tente de définir l'image sur un écran de verrouillage.
  • Les images sont stockées dans le dossier Cache.

Répondre

0

à partir des documents d'Apple:

Vous pouvez utiliser l'un des cadres audio du système pour travailler avec le contenu audio d'arrière-plan et le processus d'utilisation de ces cadres est inchangé. (Pour la lecture de vidéos sur AirPlay, vous pouvez utiliser la structure Media Player ou AV Foundation pour présenter votre vidéo.) Comme votre application n'est pas suspendue pendant la lecture de fichiers multimédias, les rappels fonctionnent normalement lorsque votre application est en arrière-plan. Dans vos rappels, cependant, vous ne devriez faire que le travail nécessaire pour fournir des données pour la lecture. Par exemple, une application audio en streaming aurait besoin de télécharger les données du flux musical à partir de son serveur et d'extraire les échantillons audio actuels pour les lire. Les applications ne doivent pas effectuer de tâches superflues sans rapport avec la lecture. Donc, si vous faites des choses comme télécharger des images et les enregistrer, etc, vous enfreignez cette règle.

+0

Merci pour la réponse, mais d'abord: les images sont déjà téléchargées. Deuxièmement: cela arrive quand j'essaie de définir la pochette sur l'écran de verrouillage. Apple fournit cette API et il est certainement lié à la lecture de fond (l'application essaie de définir l'art de couverture de la piste en cours de lecture). –