iphone: менеджер местоположения + adwhirl = разряд батареи :( - PullRequest
0 голосов
/ 03 декабря 2010

В моем приложении я использую CLLocationManager и AdWhirl. Я не сделал никаких конкретных разработок в отношении фонового режима: я не хочу, чтобы мое приложение работало, когда оно работает в фоновом режиме, то есть когда пользователь нажимает кнопку «Домой», местоположение GPS не должно обновляться.

Вчера вечером я нажал кнопку «Домой», а сегодня утром в iPhone не было батареи. Это iPhone 4 с iOS 4.1, без джейлбрейка и фонового приложения не запущено.

Аккумулятор был около 35% вчера вечером и 0% сегодня утром (iPhone был выключен).

Я установил точку останова в моем делегате, которая вызывается каждый раз, когда местоположение GPS обновляется. Когда приложение находится в фоновом режиме, делегат не вызывается. Поэтому я думаю, что GPS действительно отключен в фоновом режиме: хорошо.

Этим утром я слежу за разрядкой батареи: она падает примерно на 1% каждые 15 минут. Я думаю, что это слишком много.

Должен ли я делать что-то конкретное, когда приложение переходит в фоновый режим? Как вы думаете, это падение на 1% - это нормально?

1 Ответ

0 голосов
/ 12 января 2011

Да, доступ к интернету и GPS - два больших расхода заряда батареи.Я вообще не знаю, что вы имеете в виду под «обычным», поскольку другие приложения не запущены, вы пришли к выводу, что именно так и происходит :) Предполагая, что вы тестировали без запущенных приложений и не получили 1% за 15минут ...

Для adwhirl неизвестно, прекращает ли он уже доступ к Интернету, когда приложение переходит в фоновый режим, но вы можете добавить это к своему делегату приложения:

- (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 и adView - это объект Location Manager и adWhirlView, оба объявленные в делегате приложения. Я считаю более полезным выполнять все управление местоположением с помощью методов, которые я делаю в делегате приложения.)

...