iOS 区域监控 : Is my app crashing or is this expected?

标签 ios ios7 background cllocationmanager clregion

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

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

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

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

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

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

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

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

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

最佳答案

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

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

来自应用委托(delegate)类引用:

UIApplicationLaunchOptionsLocationKey The presence of this key indicates that the app was launched in response to an incoming location event. The value of this key is an NSNumber object containing a Boolean value. You should use the presence of this key as a signal to create a CLLocationManager object and start location services again. Location data is delivered only to the location manager delegate and not using this key.

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

关于iOS 区域监控 : Is my app crashing or is this expected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641971/

相关文章:

ios - UIcollectionView cellForItemAtIndexPath 仅在 iOS 10 中返回 Null。在 iOS 9 和 iOS 8 中运行良好

ios - 如何在队列外使用 JsonArray

ios - 如何在 Sprite Kit 中制作动画按钮

css - 有没有办法使用 CSS 创建软件框的背景阴影?

ios - ViewController 不需要的分配和初始化

objective-c - 摇动手势和 firstResponder

windows-phone-7 - 显示 WP7 应用程序的磁贴?

html - 背景位置不起作用

ios - 随机 (lldb) 在 Mac OS X 10.8.4 上的 iOS 模拟器中崩溃

ios - 如何让 UIImagePicker 相机的自定义覆盖在 iOS 7 中全屏显示?