2010-12-03 35 views
0

Dans mon application j'utilise CLLocationManager et AdWhirl.J'ai pas fait de développement spécifique concernant le mode d'arrière-plan: je ne veux pas que mon application fonctionne quand elle est en arrière-plan, c'est-à-dire lorsque l'utilisateur appuie sur le bouton "home", l'emplacement GPS ne doit pas être mis à jouriphone: gestionnaire d'emplacement + adwhirl = drain de batterie :(

Hier soir j'ai appuyé sur "bouton d'accueil", et ce matin, l'iPhone était à court de batterie, c'est un iPhone 4 avec iOS 4.1, pas jailbreaké, et il n'y a pas en cours d'exécution application de fond.

La batterie était d'environ 35% hier soir, et 0% ce matin (iPhone a été arrêté).

J'ai défini le point d'arrêt dans mon délégué, appelé chaque fois que l'emplacement GPS est mis à jour. Lorsque l'application est en mode d'arrière-plan, le délégué n'est pas appelé. Donc, je pense que le GPS est vraiment désactivé en mode d'arrière-plan: ok.

Ce matin, je suis la batterie de vidange: il s'agit d'environ 1% de chute toutes les 15 min. Je pense que c'est un peu trop.

Dois-je faire quelque chose de spécifique lorsque l'application passe en mode d'arrière-plan? Pensez-vous que cette baisse de 1% est normale?

Répondre

0

Oui, l'accès internet et le GPS sont deux gros drains sur batterie. Je ne sais pas du tout ce que vous voulez dire par normal, puisque aucune autre application n'est en cours d'exécution, vous avez conclu que c'est ce qui se passe réellement :) En supposant que vous avez testé avec aucune application en cours d'exécution et n'a pas obtenu 1% par 15 minutes ...

pour AdWhirl, on ne sait pas si elle arrête déjà l'accès à Internet lorsque l'application va dans l'arrière-plan, mais vous pouvez ajouter à votre délégué App:

- (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 et adview sont l'objet Location Manager et le adWhirlView, tous deux déclarés dans le délégué de l'application J'ai trouvé plus utile de gérer toutes les positions via les méthodes que j'ai créées dans le délégué de l'application.)