Nach dem Aufbau der iOS-App, die ich wollte, erkannte ich, es ist viel zu viel Batterie aufgrund der Standortdienste verbrauchen.App verbraucht zu viel Batterie
Hintergrund: Meine App ruft den Server jedes Mal über das Netzwerk an, wenn sich ein Benutzer 10 Meter (30 Fuß) bewegt. Dies löst die didUpdateLocation
Funktion aus. Wenn diese Funktion ausgelöst wird, verwende ich NSURLSession
, um die Koordinaten des Benutzers an den Server zu senden, das ist wirklich so.
Nun liegt das Problem darin, dass ich die Standortdienste-Hardware nach dem ersten Update nicht durch Aufruf von locationManager.stopUpdatingLocation()
ausschalten kann, da ich keine weiteren Aktualisierungen erhalten werde, wenn der Benutzer sich entscheidet, erneut zu wechseln. Darüber hinaus bleiben die Standortdienste aktiv, während die App im Hintergrund zur Überwachung der Bewegung steht, was sich ebenfalls negativ auf die Akkulaufzeit auswirkt. Ich habe fast alles zu diesem Thema gelesen, wenn es um Dokumentation und andere Fragen hier geht.
Viele andere Fragen empfehlen die Verwendung eines NSTimer
und die startUpdatingLocation()
Aufruf nach einem Intervall von Zeit vergangen ist, und ich habe die erste Location Update und rief stopUpdatingLocation
in meiner didUpdateLocation
Funktion erhalten. Also habe ich folgendes versucht:
let timerAction = NSTimer(timeInterval: 6.0, target: self, selector: #selector(MapViewController().startLocationServices), userInfo: nil, repeats: true)
timerAction.fire()
func startLocationServices() {
self.locationManager.startUpdatingLocation()
}
Dies hat aus irgendeinem Grund nicht funktioniert. Aber meine Frage konzentriert sich wirklich darauf, wie ich Batterie sparen und meine Anwendung wirklich energieeffizient machen kann, wenn ich die Bewegungen eines Benutzers im Vordergrund und im Hintergrund mit der distanceFilter = 10.0
überwachen muss?
Irgendein Vorschlag vielleicht um das, was Sie getan haben oder was Sie empfehlen würden, würde enorm gesucht und geschätzt werden.
Vielen Dank!
bearbeiten
@wain vorgeschlagen mit allowDeferredLocationUpdatesUntilTraveled:timeout:
,
Start, um die Lieferung von Standortaktualisierungen, bevor Sie diese Methode aufrufen. Der am häufigsten verwendete Ort für den Aufruf dieser Methode ist der locationManager Ihres Delegates: didUpdateLocations: method. Nachdem Sie neue Standorte bearbeitet haben, rufen Sie diese Methode auf, wenn Sie zukünftige Aktualisierungen verschieben möchten, bis die Kriterien für Entfernung oder Zeit erfüllt sind. Wenn neue Ereignisse eintreffen und Ihre App sich im Hintergrund befindet, werden die Ereignisse zwischengespeichert und ihre Zustellung entsprechend verzögert.
Nicht passieren (über eine Vielzahl von Gerätefunktionen mindestens). Warum brauchst du alle 10m 24/7? Wer wird an dieser App interessiert sein? Ist NATimer das einzige, was deine Forschung herausgefunden hat? – Wain
Die App löscht Pins, wohin Sie den ganzen Tag gegangen sind. Es ist wie ein Zurückverfolgen deiner Schritte. Es ist nur zum Spass. Ich habe andere Apps gesehen, die dies tun und es relativ effizient machen, wie Moves, Uber und so weiter. – Mihado