【问题标题】:iOS Location Services still used by an app even after killing in taskbar即使在任务栏中杀死后,应用程序仍会使用 iOS 定位服务
【发布时间】:2012-04-29 23:18:13
【问题描述】:

我有一个使用 startMonitoringSignificantLocationChanges 的应用。

打开后会出现右上角的紫色箭头。

我正在做一些测试,偶尔我会调用 stopMonitoringSignificantLocationChanges。

发生这种情况时,即使我在 Xcode 中终止了该应用程序,紫色箭头仍会显示。我进入 Settings.app -> Location Services 并看到我的应用旁边的紫色箭头也亮了,这意味着它仍在使用它。 即使在没有 Xcode 连接到设备的情况下运行,并且在我从多任务栏中终止应用程序之后,它也会这样做。

这怎么可能?

杀掉一个应用程序不应该导致重大的位置变化监控停止吗?

这肯定会在 5.1 中发生...尚未使用 5.0 进行测试。

【问题讨论】:

    标签: core-location cllocationmanager


    【解决方案1】:

    我也遇到了这个问题,但我没有监控重大的位置变化。它源于使用 CLLocationManager 并设置地图视图以在 Xcode 中的属性下显示用户位置。告诉[locationManager stopUpdating] 使我的位置经理停止发送消息,但来自地图视图的消息一直在发送。直到我告诉 Map View [mapView setShowUsersLocation:NO]它才退出。从您最初的帖子中不确定您是否甚至在使用 MapKit,但我想我会把它扔在那里以防万一。

    【讨论】:

    • 观察力不错。我没有使用 MapKit(至少在测试时没有),但这肯定会导致该问题。
    • 它解决了我的问题,谢谢。我应该更仔细地阅读文档。
    • 这种行为似乎是一个错误。有什么想法吗?我没有注意到任何明显的电池消耗,但状态栏中的位置服务图标永远不会消失。
    【解决方案2】:

    您确定您在后台/终止之前致电stopMonitoringSignificationLocationChanges

    查看CLLocationManager 的文档 - 这可能对您来说很重要:

    如果您启动此服务并且您的应用程序随后被终止,如果有新事件到达,系统会自动将应用程序重新启动到后台。

    那里有一些非常具体的细节,关于当你被终止时如何处理数据(在application:didFinishLaunchingWithOptions: 内)。

    【讨论】:

    • 自从我提出最初的问题以来,我已经将其重写为不再使用位置服务后台处理标志。当使用 [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(){}];该应用程序最多可以有 10 分钟的时间来做某事。只要我需要了解位置更新。但是,即使我的 expireHandler 有以下两行,应用程序有时仍然不会停止: [self.locationManager stopMonitoringSignificantLocationChanges]; [self.locationManager stopUpdatingLocation];还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多