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

您可能会受益于我在后台对定位服务的使用。本质上,我在主线程中设置了位置管理器,但接收到位置事件的所有处理都是在后台线程上完成的。

这将允许您的主线程继续进行而不会阻塞。

在此处查看代码TTLLocationHandler GitHub 存储库

于 2012-12-01T15:16:00.343 回答