2010-07-06 31 views
3

Cet après-midi, j'ai promené mon iPhone 4 dans l'Apple Store pour voir si ils pouvaient aider avec un problème que j'ai eu. La vie de la batterie n'a pas été TOUT ce qu'elle devrait être - la batterie tombe 50% assis sur mon bureau pendant la nuit. Fou. Donc je suspecte que j'ai une unité de fesses. Arrive. Pas de biggie. Mon génie amical tourne un peu autour de mon téléphone, et fait remarquer que le pointeur des services de localisation est allumé dans le coin supérieur droit de l'écran. Il entre dans les paramètres des services de localisation. Il note que les applications suivantes ont le drapeau «J'ai obtenu les données de localisation au cours des dernières heures»: La chaîne météo, les horaires et deux applications que j'ai écrites et que je n'ai plus besoin de soumettre.Strangest Thing Ever: Emplacement principal reste actif même lorsque l'application ne fonctionne pas

Il désactive les curseurs pour chacune de ces applications et le pointeur de service de localisation en coin s'éteint. La réactivation des services de localisation pour l'une de mes applications le fait se réactiver, et ce n'est PAS le cas pour Weather Channel ou Showtimes. Mais il est clair que l'activation des services de localisation pour mes deux applications déclenche les services de localisation de l'appareil. Ma vie de batterie moche est expliqué, mais ce n'est que le début du mystère.

Voici la chose .... Aucune de mes applications ne fonctionne toujours à l'époque. Ils n'ont même pas de contexte. Ils sont désactivés. Je pense qu'ils sont tous deux construits dans un profil de débogage sur mon appareil pour le moment, et ils utilisent tous les deux Core Location. Ils ne sont pas suspendus, ils ne sont pas à plat. Et pourtant, activer le curseur dans le panneau de contrôle des services de localisation pour l'un d'entre eux allume les services de localisation en général.

Alors ... Qu'est-ce qui se passe ici? Aucune de ces applications n'est configurée pour l'emplacement d'arrière-plan. Et ... ils ne sont pas en arrière-plan! Et comme les services de localisation ont été désactivés pour eux, il ne fait aucun doute que mon utilisation de la batterie est bien inférieure.

+0

J'ai remarqué un problème similaire lorsque j'ai quitté une application de carte de trafic suspendue un jour (elle utilise CoreLoc). La batterie était à 10% après quelques heures. Êtes-vous sûr qu'ils n'ont pas été suspendus? Sinon, cela ressemble à un bug iOS. Les applications sont censées désactiver CoreLocation lorsqu'elles sont suspendues (sauf si elles en ont spécifiquement besoin bien sûr). – progrmr

+0

@progrmr: Mort certaine. En tapotant deux fois sur le bouton d'accueil, vous avez affiché une liste VIDE d'applications en arrière-plan. Pas question que mes deux applications ne soient pas suspendues. –

Répondre

3

La solution est à ce fil dans le forum des développeurs d'Apple: https://devforums.apple.com/thread/58063?tstart=0

Une version antérieure de ces deux applications avait appelé [locationManager startMonitoringSignificantLocationChanges], et jamais appelé stopMonitoring.... Même si la version actuelle des applications ne faisait pas cet appel, le système d'exploitation avait toujours la demande de surveillance «enregistrée» pour les applications (et, en fait, les relançait en arrière-plan pendant que je conduisais en ville!). Ce que je ne savais pas, c'est que la demande de surveillance persiste à travers les lancements - et à travers les reconstructions! Je supposais que, comme -startUpdatingLocation, la demande de surveillance mourrait avec le processus, mais pas ainsi. La solution consistait à supprimer les applications de mon appareil et à les réinstaller.

+0

Oui, il n'existe actuellement aucun moyen de désactiver uniquement les mises à jour de position importantes pour les applications qui l'utilisent. Juste les tuer en utilisant le commutateur de l'application ne suffit pas. Par conséquent, si vous utilisez des mises à jour de position importantes dans votre application, assurez-vous de fournir une interface utilisateur pour désactiver ce service (ou ne l'activer que dans certaines circonstances). –