【问题标题】:iOS Region Monitoring: Is my app crashing or is this expected?iOS 区域监控:我的应用程序崩溃了还是预期的?
【发布时间】:2014-03-05 16:54:20
【问题描述】:

我的应用在后台运行时使用区域监控。一旦应用程序进入后台,我就会获取他们的位置(我已经在前台拥有)并在其周围创建一个区域并开始监控该区域。

我正在使用可可伐木工进行日志记录,并且在 applicationDidFinishLaunchingWithOptions 内部设置了日志记录,一旦完成,我就会记录“开始记录...”。通常,我希望仅在应用程序首次打开时看到这一点,或者如果由于某种原因应用程序崩溃并且我必须重新启动它并查看日志以确定原因。今天在开车时进行测试,我注意到在 5 小时内我的文件中有 15 个“开始记录”实例,总是在我创建区域后几分钟,就像这样(我删除了位置特定信息):

  • 7:17pm:创建区域:regionFor:[xxx,-xxx],半径:200
  • 7:25pm:开始记录......

(这里我做了几个快速的位置更新,看看它们是否移动并向服务器发送请求,这大约需要 1 秒,然后创建另一个区域来监控......)

  • 7:25pm:创建区域:regionFor:[xxx,-xxx],半径:200
  • 7:44pm:开始记录......

(这里我做了几个快速的位置更新,看看它们是否移动并向服务器发送请求,这大约需要 1 秒,然后创建另一个区域来监控......)

  • 7:44pm:创建区域:regionFor:[42.77846,-71.42591],半径:100
  • 8:04pm:开始记录......

在我删除与位置更新相关的日志和我认为不相关的服务器请求之间存在日志...我只是想知道为什么在这些点调用了该死的 applicationDidFinishLaunching,因为我只见过它调用当应用程序在被用户强行终止后第一次启动时,手机本身重新启动或应用程序崩溃,而不是从后台唤醒,这是我对区域监控的期望读。这是预期的行为,还是我的应用程序崩溃然后操作系统又以某种方式重新启动?

需要注意的一点是,我可能会开始执行后台任务来处理位置更新并发送请求,因为我确信有时位置更新可能需要一点时间,而请求可能需要一段时间同样,我需要超过大约 10 秒的时间来处理 didExitRegion 更新,但这似乎与我看到的这种看似奇怪的行为无关。任何帮助将不胜感激。

【问题讨论】:

    标签: ios ios7 background cllocationmanager clregion


    【解决方案1】:

    这是预期的正常行为。通过设置区域监控,您不会让应用程序在后台保持活动状态。操作系统仍将决定何时以及是否在后台休眠或终止您的应用程序。您的受监控区域会持续存在,并且您的应用会在适当的时候被唤醒。

    如果您的应用程序被终止或休眠,您将看到调用的应用程序委托的application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions: 方法。您可以检查选项键来判断您的应用是否已被位置事件唤醒。

    来自应用委托类参考:

    UIApplicationLaunchOptionsLocationKey 这个键的存在 表示应用程序是响应传入的 位置事件。这个键的值是一个 NSNumber 对象,包含 一个布尔值。您应该使用此键的存在作为信号 创建一个 CLLocationManager 对象并启动位置服务 再次。位置数据仅传递给位置管理器 委托而不使用此密钥。

    在大多数情况下,如果你的 locationManager 是用这种方法创建的,你不会做任何不同的事情。根据您的用例,您可以在后台以不同方式处理委托调用,或者您可以在所有状态下做出相同的反应。这是您必须自己考虑的事情。

    【讨论】:

    • 非常感谢您提供的信息!
    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多