使用 iOS CLLocationManager 节省电池

Posted

技术标签:

【中文标题】使用 iOS CLLocationManager 节省电池【英文标题】:Conserving Battery with iOS CLLocationManager 【发布时间】:2014-12-03 20:36:28 【问题描述】:

考虑到我的应用程序的限制,我正在尝试通过使用 CLLocationManager 来提高效率:

    如果应用处于“A”模式,请提供尽可能多且准确的位置数据 尽可能。

    如果应用程序处于模式“B”,请至少每 10 分钟签入一次 具有“足够好”(可能约为 500m)的位置数据

    当应用程序处于 背景。

由于约束 3,我在我的 plist 中向 UIBackgroundModes 添加了“位置”。 我正在像这样配置我的核心位置管理器:

- (CLLocationManager *)manager 
    if (_manager == nil) 
        _manager = [[CLLocationManager alloc] init];
        _manager.desiredAccuracy = kCLLocationAccuracyBest;
        _manager.distanceFilter = kCLDistanceFilterNone;
        _manager.pausesLocationUpdatesAutomatically = NO;
        _manager.delegate = self;
    

    return _manager;

我还定义了一个这样的枚举:

typedef NS_ENUM(NSUInteger, LocationMonitoringMode) 
    LocationMonitoringModeSignificantChanges, //Mode B
    LocationMonitoringModeContinuous, //Mode A
;

我是这样使用的:

- (void)setLocationMonitoringMode:(LocationMonitoringMode)mode 
    if (mode == LocationMonitoringModeContinuous) 

        [self.manager stopMonitoringSignificantLocationChanges];
        [self.manager startUpdatingLocation];

     else if (mode == LocationMonitoringModeSignificantChanges) 

        [self.manager stopUpdatingLocation];
        [self.manager startMonitoringSignificantLocationChanges];
    

问题:这种“切换”是使用 CLLocationManager 节省电池的有效方法吗?显然,使用kCLLocationAccuracyBestkCLLocationAccuracy3Kilometers(gps 与蜂窝塔无线电)的功耗存在很大差异。但是是否也有很大的成本,比如kCLLocationAccuracyBestkCLLocationAccuracyNearest10Meters

【问题讨论】:

kCLLocationAccuracyBest & kCLLocationAccuracyNearest10Meters 的费用相同。任何低于 100m 的距离都需要设备为 GPS 芯片供电。 【参考方案1】:

第一个问题:

是的。切换看起来很好。您不必创建两个单独的位置管理器实例。

根据 Apple 关于 CoreLocation 的文件 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

显着变化的位置服务提供的准确度足以满足大多数应用的需求,是标准位置服务的省电替代方案。该服务使用 Wi-Fi 来确定用户的位置并报告该位置的变化,从而使系统能够比其他方式更积极地管理电源使用情况。

第二个问题:

您可以使用 Apple 的能量诊断仪器来查看 GPS 芯片的启动精度。我们最近的调查表明,当 desiredAccuracy 或 distanceFilter 值小于 100 米时,GPS 芯片就会通电。仪器提供的能源使用值对我来说非常粗略,无法得出所需准确度和电池使用量之间的任何直接关联。然而,根据流行的观点,尽可能不打开 GPS 芯片是节能的一个很好的代表。

【讨论】:

以上是关于使用 iOS CLLocationManager 节省电池的主要内容,如果未能解决你的问题,请参考以下文章

使用 iOS CLLocationManager 节省电池

CLLocationManager 未在 iOS 10.2 [Swift] 中调用 didUpdateLocation()

ios CLLocationManager didUpdateToLocation 经纬度迁移

iOS - 在不使用 CLLocationManager 的情况下确定用户所在的国家/地区

CLLocationManager requestWhenInUseAuthorization() 不能在 ios7 上使用 swift 2.0

在 iOS 11 和 Xcode 9.1 中未调用 CLLocationManager 的 didUpdateLocations 委托 [重复]