2010-12-03 10 views
0

In meiner App verwende ich CLLocationManager und AdWhirl. Ich habe keine spezifische Entwicklung in Bezug auf den Hintergrundmodus gemacht: Ich möchte nicht, dass meine App funktioniert, wenn sie im Hintergrund ist, dh wenn der Benutzer die "Home-Taste" drückt, sollte GPS-Position nicht aktualisiert werden.iphone: location manager + adwhirl = Batterieverbrauch :(

Gestern Abend habe ich "Home-Taste" gedrückt, und heute Morgen war das iPhone aus der Batterie.Es ist ein iPhone 4 mit iOS 4.1, nicht jailbreaked, und es gibt keinen Hintergrund App läuft.

Die Batterie war etwa 35% gestern Abend, und 0% heute Morgen (iPhone war Shutdown).

Ich habe einen Haltepunkt in meinem Delegaten festgelegt, der jedes Mal aufgerufen wird, wenn der GPS-Standort aktualisiert wird. Wenn sich die App im Hintergrundmodus befindet, wird der Delegat nicht aufgerufen. Also ich denke GPS ist im Hintergrundmodus wirklich deaktiviert: ok.

Heute morgen, ich bin auf Batterie-Drain: es ist etwa 1% fallen alle 15 min. Ich denke es ist ein bisschen zu viel.

Sollte ich etwas Bestimmtes tun, wenn die App in den Hintergrundmodus wechselt? Denken Sie, dass dieser 1% ige Rückgang normal ist?

Antwort

0

Ja, Internet-Zugang und GPS sind zwei große Kondensatableiter. Ich weiß überhaupt nicht, was du mit normal meinst, da keine anderen Apps laufen, hast du daraus geschlossen, dass das tatsächlich passiert :) Angenommen, du hast mit NO Apps getestet und hast nicht 1% pro 15 bekommen Minuten ...

Für AdWhirl, dann ist es nicht bekannt, ob es das Internet Zugriff auf bereits beendet, wenn die App in den Hintergrund geht, aber Sie können dies AppDelegate hinzu:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    /* 
    Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    If your application supports background execution, called instead of applicationWillTerminate: when the user quits. 
    */ 
    [lm stopUpdatingLocation]; 
    [adView ignoreAutoRefreshTimer] 
} 


- (void)applicationWillEnterForeground:(UIApplication *)application { 
    /* 
    Called as part of transition from the background to the active state: here you can undo many of the changes made on entering the background. 
    */ 
    [adView doNotIgnoreAutoRefreshTimer] 
    [lm startUpdatingLocation]; 
} 

(lm und adView sind das Location Manager-Objekt und die adWhirlView, die beide im App-Delegate deklariert sind.Es hat sich als nützlicher erwiesen, die gesamte Standortverwaltung über Methoden zu erledigen, die ich im App-Delegaten vorgenommen habe.)