我有一个在后台运行的应用程序收集GPS位置并将其发送到服务器。 该应用程序自iOS 7或之前就已存在。
当M7出现时,我设法在设备停止或移动时停止/启动背景位置。这样,应用程序只消耗2-6%的电池,位置监控100%有效。所以我有一个背景GPS位置监控应用程序非常适合电池使用。
直到iOS 9才真实。
相同的应用程序,消耗约5%,现在在iOS 9 / 9.1中消耗30-60%。 我尝试了很多东西,但我没有看到任何电池使用差异的原因。 我确实意识到电池百分比是一个相对的信息,但我正在测试,因为iOS 9出来了,它真的耗尽了更多的电池。
我在iOS 8.2 / 8.4上运行该应用程序,它只消耗2-6%。在iOS 9 / 9.1上运行的相同版本的应用程序消耗大约40%! M7工作正常,GPS监听器按预期停止/启动。但是iOS 9上的电池使用情况很疯狂。
如果我根本没有启用GPS位置,那么在iOS 9上运行的应用程序消耗大约3%。但是如果我启用GPS定位一段时间然后根据M7停止它,则电池使用率会超高。所以问题实际上是GPS定位。
当我调用[MyLocationManager stopUpdatingLocation]时,看起来iOS并没有关闭GPS硬件。
这是我初始化我的位置管理器的方式:
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
if ([locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) {
[locationManager setAllowsBackgroundLocationUpdates:YES];
}
if ([locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
locationManager.pausesLocationUpdatesAutomatically = NO;
locationManager.activityType = CLActivityTypeOther;
}
当我想开始时,我打电话给:
[locationManager startUpdatingLocation];
为了阻止它,我打电话给:
[locationManager stopUpdatingLocation];
我重复一遍:
我的位置管理员没有一直在运行!我根据M7的报告开始和停止它!
相同版本的应用程序在早期iOS版本上消耗的电量要少得多。
其他人注意到了吗? 自iOS 9以来,CLLocationManager是否存在错误或其他问题? 我现在应该接受相同的应用消耗更多的电池吗? Apple是否通过显示更多的电池使用来谴责使用背景GPS位置的应用程序?
我该怎么办?
欢迎任何想法/建议!
PS:我不是在质疑背景位置是否是一件好事。我们有合法用途。