Swift中显著位置变化服务与标准位置服务的冲突问题咨询
位置服务并行调用与后台行为说明
配置覆盖问题解答
先给明确结论:先后调用startMonitoringSignificantLocationChanges()和startUpdatingLocation(),完全不会覆盖已经开启的显著位置变化监测配置。
- iOS位置服务的两类定位能力是独立注册、并行生效的,启动操作只对当前调用的模式生效:
- 调用
startUpdatingLocation()只会打开连续高精度位置更新的回调通道,不会主动关闭已经开启的显著位置监测 - 只有手动调用对应的停止方法(
stopMonitoringSignificantLocationChanges()、stopUpdatingLocation()),才会终止对应模式的运行,不存在“调用A就自动停掉B”的逻辑
- 调用
进程终止后的事件接收能力
- 显著位置变化监测(SLC)是系统层面的常驻唤醒机制:只要你没有手动关闭这个监测、应用持有合规的定位权限,哪怕应用被用户从多任务划掉、进程被系统彻底终止,系统也会在检测到设备触发位置变化阈值时,重新唤醒应用进程,把位置事件递送给你。
- 常规的连续位置更新(由
startUpdatingLocation()触发)没有进程终止后的唤醒能力:应用被杀后,这类更新通道会直接失效,不会触发任何回调,但这部分行为完全不会影响已开启的显著位置监测的运行。
开发注意事项
- 两种模式同时运行时,系统会按照精度要求更高的连续定位参数工作,整体功耗会比单独开显著位置监测更高。不需要连续定位的时候,记得及时调用
stopUpdatingLocation()关闭连续更新,避免无意义的耗电。 - 写统一的位置服务清理逻辑时,不要无差别同时调用两个停止接口,很容易误关显著位置监测,导致应用被杀后收不到位置唤醒事件。
内容的提问来源于stack exchange,提问作者andre
相关产品推荐
相关产品推荐

