2016-05-11 5 views
0

reduzieren Ich habe eine App, die im Hintergrund ausgeführt wird und das Benutzerlaufwerk überwacht.iOS: Wie Hintergrundaktivität in Laufwerk-Tracking-App

Die App bleibt aufgrund des CLLocation-Hintergrundmodus im Hintergrund aktiv.

Aber das Problem ist, dass die App Hintergrundaktivität als 22 Stunden in den letzten 24 Stunden anzeigen. Mein Verständnis ist, dass die Hintergrundaktivität viel Batterie verbraucht.

Es gibt einige Drive-Tracking-Apps, deren Hintergrundaktivität ungefähr der Summe aller Laufwerkszeiten entspricht. Meine App verbraucht 3 Mal mehr Energie als sie.

Wie kann ich alle Benutzerlaufwerke erkennen und gleichzeitig die Hintergrundaktivität reduzieren und dadurch den Batterieverbrauch reduzieren?

Antwort

1

Ihre Anwendung wird jedes Mal aktiv didUpdateLocation Delegate von CLLocationManager löst die Häufigkeit aus, mit der CLLocationManager den Delegate auslöst, hängt von der Genauigkeit ab, die Sie in Ihrer CLLocationManager-Konfiguration angegeben haben.

- (CLLocationManager *)defaultLocationManager { 
    static dispatch_once_t pred = 0; 
    static CLLocationManager *locationManager = nil; 
    dispatch_once(&pred, ^{ 
     locationManager = [[CLLocationManager alloc] init]; 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy=kCLLocationAccuracyThreeKilometers; //try setting accuracy filter to a value where it wont end up calling your delegate frequently yet gives you enough info about user location as per your need 
     locationManager.distanceFilter=3000; //try setting distance filter to a value where it wont end up calling your delegate frequently yet gives you enough info about user location as per your need 
     [locationManager requestAlwaysAuthorization]; 
    }); 
    return locationManager; 
} 

Vorsicht bei der Verwendung von Hintergrundmodi, insbesondere Standortaktualisierungen. Apple lehnt Ihre App sehr wahrscheinlich ab, wenn Sie Ortsaktualisierungen für andere Zwecke verwenden und den Standort des Nutzers verfolgen.

Apple erwartet, dass Sie die Aussage in Ihrer App Beschreibung hinzufügen, die klar angibt, dass die fortgesetzte Verwendung von GPS die Batterie entleert.

Meistens benötigen die App keine Echtzeit-Standortaktualisierungen. Wenn Sie solch einen solchen Fall ist und doch wollen Sie den Standort des Nutzers verfolgen, die Hintergrundmodus für Standortaktualisierung entfernen und versuchen significantLocationChanges

[[self defaultLocationManager] startMonitoringSignificantLocationChanges]; 

Hinweis verwendet: für SignificantLocationChanges Beobachten Sie nicht brauchen Fähigkeit Hintergrund Modi und Sie werden Erhalten Sie weiterhin die Kontrolle, auch wenn Ihre App im Hintergrund ist, genau wie die Echtzeit-Standortaktualisierung.

Lesser Genauigkeit, geringerer Stromverbrauch weniger Aufruf app :)

Hoffnung meine Antwort Ihnen geholfen :)

+0

Ihre Antwort sehr hilfreich ist. Meine App verfolgt den Nutzer, sodass die Standortgenehmigung kein Problem darstellt. Aber ich möchte den Benutzerstandort alle 1 Minute bekommen. Wie ist das möglich, während die Akkulaufzeit erhalten bleibt? Meine App benötigt den Standort des Nutzers nur 1 Stunde am Morgen und 1 Stunde am Abend. –

+0

Die ersten Lokalisierungsdienste sind nicht dafür ausgelegt, mit Zeitintervallen zu arbeiten. Der Colocation Manager löst nur dann eine Standortaktualisierung aus, wenn das iPhone seinen Standort ändert. Es macht Sinn auf alle möglichen Arten, denn wenn Sie Ihr iPhone für 1 Stunde auf dem Schreibtisch gehalten haben, ist es immer derselbe Ort, an dem Ihr Schreibtisch stationär ist: p Warum wird es Zeit verschwenden, die 60 Mal Ihre App zum Abbrennen der Batterie auslöst? ?? Können Sie bitte klären, warum Sie nach jeder Minute Updates für den Standort benötigen? Warum können Sie nicht auf Standortfilter weitergeleitet werden? Ich glaube, wenn Sie Standort-Updates nur für Tracking-Benutzer verwenden –

+0

Dann Entfernung Filter muss die sehr faire Arbeit tun. Versuchen Sie, den Entfernungsfilter so genau zu setzen, wie Sie den Genauigkeitslevel auf den genauesten Wert einstellen müssen und Sie müssen gut gehen :) Wie der Stromverbrauch betrifft, wenn Sie Ihre Hintergrundaktivität nur für 2 Stunden beginnen, dann wie kommen Sie dazu 22 Stunden aktiv sein ???Das bedeutet entweder Sie haben angefangen und haben es überhaupt nicht gestoppt :) mein Vorschlag, weil Sie keinen Ablaufhandler oder Nstimer verwenden können, da die App zwischen zwei Standortaktualisierungen pausieren könnte. In diesem Fall könnte der Timer ebenfalls anhalten, also speichern Sie die aktuelle Zeit in –