2012-05-11 3 views
0

Я заметил, что в своем приложении, когда я вызываю startUpdatingLocation, мой пользовательский интерфейс блокируется ненадолго, пока я предполагаю, что устройство собирает данные о местоположении. Это типично и есть ли способ ограничить это? heres, как выглядит мой кодCLLocationManager startUpdatingLocation вызывает задержку

-(void)getUserLocation { 
    if (!locationManager) 
    { 
     locationManager = [[CLLocationManager alloc]init]; 
    } 

    [locationManager setDelegate:self]; 
    [locationManager startUpdatingLocation]; 

} 

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 

    self.userCoordinate = newLocation.coordinate; 

    NSLog(@"user coordinate in location manager: %f,%f",self.userCoordinate.latitude,self.userCoordinate.longitude); 
    [locationManager stopUpdatingLocation]; 
    locationManager = nil; 

    userLocationAvailable = YES; 
    [self getDataForScrollView]; 

} 

любые идеи? Благодаря!

ответ

1

Это потому, что вы получаете местоположение в основном потоке, тогда как основной поток используется для ответственного за пользовательский интерфейс. то есть события пользовательского касания. поэтому вы чувствуете, что ваше приложение немного отстает.

Это нормально, если вы выполняете большую задачу (например, получать данные с веб-сервера) в основном потоке. Вы можете поместить «Поворот», чтобы указать пользователю вместо того, чтобы сделать ваш пользовательский интерфейс замороженным.

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

+0

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

0

Вы можете воспользоваться моим использованием служб определения местоположения в фоновом режиме. По сути, я настроил диспетчер местоположений в основном потоке, но вся обработка при получении событий местоположения выполняется в фоновом потоке.

Это позволит вашему основному потоку продолжать работу без блокировки.

См код здесь TTLocationHandler GitHub Repository

Смежные вопросы