Question iOS5 Que signifie "Éliminer le message pour l'événement 0 en raison d'un trop grand nombre de messages non traités"?


Je fais des tests de performance de mon application et j'ai remarqué qu'il fallait beaucoup de temps pour exécuter certaines intégrations. Au bout d’un moment, j’ai tout un tas de

Discarding message for event 0 because of too many unprocessed messages

dans la console xcode. Qu'est-ce que cela signifie précisément?


41
2017-10-22 04:05


origine


Réponses:


C'est ce que dit le support technique d'Apple à ce sujet (après avoir payé 49 dollars pour un incident de support technique par les développeurs):

Ces messages proviennent du framework Core Location. La cause la plus probable de ces messages est qu’il n’existe pas de boucle d’exécution sur le thread sur lequel le CLLocationManager a été créé. (Cela implique que CLLocationManager n'a pas été créé sur le thread principal.) Les messages en cours de suppression sont des messages d'emplacement: l'événement 0 correspond à un emplacement et l'événement 24 est une mise à jour du statut d'autorisation, par exemple. Les messages étant ignorés, vous ne verrez pas les rappels de délégué appropriés invoqués. Avez-vous configuré une geofence ou un autre rappel et ne le gérez pas assez rapidement? La limite de la file d'attente semble être de 10 avant de commencer à vider les événements et de consigner ce message. Cette information n'est pas encore documentée publiquement. Je travaille avec l'équipe Core Location pour améliorer les messages signalés et voir si cela peut être mieux documenté.


85
2017-11-12 23:13



Michael a raison, la raison en est que le gestionnaire de localisation ne peut s'exécuter que sur le thread qui a une boucle en cours d'exécution (thread principal par défaut), sinon les callbacks envoyés par lui ne seront pas traités. S'il vous plaît voir l'avertissement suivant une fois que j'ai essayé d'initialiser Zoosh SDK sur un thread d'arrière-plan:

AVIS, Un gestionnaire de localisation (0x11b5c9d0) a été créé sur une file d'attente de distribution s'exécutant sur un thread autre que le thread principal. Il incombe au développeur de s'assurer qu'une boucle d'exécution est en cours d'exécution sur le thread sur lequel l'objet du gestionnaire d'emplacement est alloué. En particulier, la création de gestionnaires d'emplacement dans des files d'attente de répartition arbitraires (non associées à la file d'attente principale) n'est pas prise en charge et entraînera la non réception des rappels.

C'est clair. Et mettre l'initialisation dans le thread principal efface cet avertissement et aucun «message de suppression pour l'événement 0 en raison d'un trop grand nombre de messages non traités» ne se produit.


1
2018-05-29 05:14