【问题标题】:CLLocationManager Overheating iPhoneCLLocationManager 过热 iPhone
【发布时间】:2012-03-24 13:06:34
【问题描述】:


我正在制作一个带有增强现实的应用程序。
基本上我所拥有的是一个屏幕,上面有来自相机、雷达视图和一些标记的图像。
我正在使用 CLLocationManager 来获取有关我的航向和位置的更新。
我需要始终打开航向更新,因为雷达旋转取决于它。我正在使用位置更新来获取我的位置,并在此基础上寻找要显示的标记。
问题是,当我同时打开 iPhone 时,iPhone 过热了一段时间(10 +- 分钟)。我将精度设置为每 100 米,距离过滤器设置为 100。
我是否应该设置一个计时器来停止和开始更新位置以防止过热(并且可能也节省一些电池寿命)?还有其他方法吗?
感谢您的建议。

【问题讨论】:

  • 这听起来确实像是您以某种方式过度使用 CPU。我曾经有一个应用程序陷入诺基亚手机的 CPU 循环中,并且它过热到足以软化将屏幕固定在一起的胶水。确保您的应用在应该等待事件时没有处于“旋转循环”中。
  • @HotLicks 我不认为这很糟糕 :),我的意思是它很温暖(iphone 并不经常加热,所以看到它温暖对我来说很奇怪)在右上角相机是(可能也是具有核心位置的东西)。我会按照 Kendall 的建议检查时间分析器,看看会发生什么

标签: iphone objective-c ios cllocationmanager augmented-reality


【解决方案1】:

现在是使用“Time Profiler”工具的好时机。我确信使用 GPS 是造成部分热量的原因,但您很容易让代码的其他部分过度使用 CPU 或 GPU。

还有一个 OpenGL 性能工具,我会看看你是否能找到任何对 GPU 造成过多负担的部分。

另一种可能性是研究使用 AVFoundation 来获取相机图像,看看您是否可以为正在叠加的视频图像指定更便宜的预览参数。

【讨论】:

    【解决方案2】:
        - (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];
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多