2012-05-11 7 views
0

私のアプリでは、startUpdatingLocationを呼び出すと、デバイスが位置データを収集すると仮定してUIが短時間ロックされていました。これは典型的なことですが、これを制限する方法はありますか?私のコードがどんなものかを調べるCLLocationManager startUpdating遅れの原因となる位置

-(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

これは、メインスレッドでの位置情報を取得しているためです。メインスレッドは、UIの処理に使用されています。ユーザタッチイベントを検出する。あなたのアプリが少し遅れていると感じている理由です。

メインスレッドで大きなタスク(Webサーバーからのデータ取得など)を行うと、これは正常です。 UIを凍結させるのではなく、ユーザーを示す「読み込み中」スピンビューを配置することができます。

また、別のスレッドで場所を取得しようとすることもできます。私もこれをやろうとしていましたが、私はまだ成功しませんでした。だから私は現在、最初のアプローチでやっています。

+0

私は空白にバックグラウンドキューに配置しようとしました。 –

0

私は、バックグラウンドでの位置情報サービスの使用を見てメリットが得られます。基本的には、メインスレッドでロケーションマネージャを設定しますが、ロケーションイベントの受信時のすべての処理はバックグラウンドスレッドで行われます。

これにより、メインスレッドはブロックせずに続行できます。

ここにコードを表示TTLocationHandler GitHub Repository

関連する問題