在NSTimer中使用startMonitoringSignificantLocationChanges可以提高电池使用率

时间:2012-12-31 10:37:23

标签: ios optimization nstimer cllocationmanager

我目前正在开发其他开发人员的iOS应用。该应用程序需要监视位置更改,因为它需要以低精度(百米)知道用户位置。之前的位置内容实现是使用NSTimerstartUpdatingLocation完成的。执行如下:

// Fire each 10 seconds start updating location
self.timerPosition = [NSTimer scheduledTimerWithTimeInterval:ti
                                                      target:self
                                                    selector:@selector(location)
                                                    userInfo:nil
                                                     repeats:YES];
[self.timerPosition fire];

位置选择器执行此操作

// Configure & check location services enabled
...
self.locman.delegate = self;
self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[self.locman startUpdatingLocation];

然后在位置经理代表

[manager stopUpdatingLocation];

但是阅读有关在Apple文档中获取用户位置的信息,似乎以低功耗获取该位置的正确方法是使用startMonitoringSignificantLocationChanges

我的问题是,将位置计时器与startMonitoringSignificantLocationChanges而不是startUpdatingLocation结合使用是一个很好的决定,还是一种无意义的方法?

当应用在后台时,我不需要获取位置,但我想知道用户在应用处于活动状态时何时更改了位置。

1 个答案:

答案 0 :(得分:1)

我可以告诉你,当你使用低功率-startMonitoringSignificantLocationChanges时,不能也不需要定时器。该方法仅在设备检测到更改时响应委托的回调。这个位置检查不使用GPS,它使用已经发生的Wifi和蜂窝塔三角测量。因此,通过使用此方法,无需减慢速度以节省电池寿命。只需设置委托方法并做出相应的响应。

我不确定您的位置实现是什么,但区域监控也是使用很少甚至没有电池来获取位置更新的另一种好方法。当您具有要监视的特定位置而不仅仅是一般用户位置时,区域监视会更有帮助。希望这可以解决问题。