CLLocationManager Перегрев iPhone - PullRequest
0 голосов
/ 07 марта 2012

Я делаю приложение с дополненной реальностью.В основном у меня есть экран с изображением с камеры, вид радара и некоторые маркеры на экране.Я использую CLLocationManager, чтобы получать обновления моего заголовка и местоположения.Мне нужно, чтобы обновления курса всегда были включены, потому что от этого зависит вращение радара.Я использую обновления местоположения, чтобы получить свою позицию и на основании этого я ищу маркеры, чтобы показать.Проблема в том, что когда я включил оба устройства, iPhone перегревается в течение некоторого времени (10 + - минут).Я установил точность на каждые 100 метров и дистанционный фильтр на 100.Должен ли я установить таймер, чтобы остановить и начать обновление местоположения, чтобы предотвратить перегрев (и, возможно, сэкономить время автономной работы)?Есть ли другой подход к этому?Спасибо за советы.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Это действительно хорошее время для пользователя инструмента «Time Profiler». Я уверен, что использование GPS ответственно за некоторую высокую температуру, но вы могли бы легко получить какую-то другую часть кода, которая использует CPU или GPU слишком сильно.

Существует также инструмент для повышения производительности OpenGL, я хотел бы взглянуть на него, чтобы выяснить, можно ли найти какие-либо детали, которые слишком сильно нагружают GPU.

Другая возможность - изучить использование функции AVFoundation для получения изображения с камеры и посмотреть, можете ли вы указать менее дорогие параметры предварительного просмотра для видеоизображения, которое вы накладываете.

0 голосов
/ 07 марта 2012
    - (id) init 
    {
self = [super init];
if (self != nil)
{
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self; 

}
return self;
    }
    - (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
{
NSLog(@"Location: %@", [newLocation description]);
[self.delegate locationUpdate:newLocation];
}
- (void)locationManager:(CLLocationManager *)managerdidFailWithError:(NSError *)error;

{     
[self.delegate locationError:error];
NSLog(@"Error Error: %@",[error description]);
}

Эти функции делегата будут вызываться в классе MyCLConrolleer.m.

Выделите этот класс в классе ViewController следующим образом.

     locationController = [[MyCLController alloc] init];
locationController.delegate = self;
[locationController.locationManager startUpdatingLocation];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startUpdatingLocation];
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
 showCurrentLocation = NO; 

Функции делегатов в классе View Controller

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    [self getLocationNameWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
  }
...