0

私のアプリでstartUpdatingLocationを呼び出すと、デバイスが位置データを収集していると推測している間、UIが一時的にロックされることに気付きました。これは典型的なものであり、これを制限する方法はありますか?これが私のコードの様子です

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

}

何か案は?ありがとう!

4

2 に答える 2

1

これは、メインスレッドで場所を取得しているのに対し、メインスレッドはUI関連の処理に使用されているためです。つまり、ユーザータッチイベント。そのため、アプリに少し遅れがあると感じます。

メインスレッドで大きなタスク(たとえば、Webサーバーからデータを取得する)を実行する場合、これはごく普通のことです。UIをフリーズさせる代わりに、「読み込み中」のスピンビューを配置してユーザーを示すことができます。

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

于 2012-05-11T05:08:06.947 に答える
0

バックグラウンドでの位置情報サービスの使用を確認することでメリットが得られる場合があります。基本的に、メインスレッドでロケーションマネージャーを設定しましたが、ロケーションイベントの受信時のすべての処理はバックグラウンドスレッドで実行されます。

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

ここのコードを参照してくださいTTLocationHandlerGitHubリポジトリ

于 2012-12-01T15:16:00.343 に答える