iOS:如何检测UIApplicationDelegate状态何时变为“挂起”?

mm2*_*m24 3 background objective-c uiapplicationdelegate ios ibeacon

我们如何检测iOS应用何时被暂停

UIApplicationDelegate官方文档中没有提及此方法。

这些是应用程序可以具有的状态:


(来源:apple.com

用例:

我想记录由于位置事件而唤醒应用后停止运行的时间。例如,我有一个iBeacon,该应用程序正在跟踪。我激活了iBeacon,该应用程序在后台成功启动(持续10秒钟)。我想,当应用程序停止运行这10秒钟后,检测经过。但是,似乎没有AppDelegate方法允许拦截此事件(请考虑我正在调查此特定情况。

上一个问题: 我问过一个类似的问题,但没有得到回答。请在这里找到它。

dav*_*ung 5

虽然我不知道有任何回调,但是您可以查询剩余的后台时间:

NSLog(@"background time remaining: %8.2f", [UIApplication sharedApplication].backgroundTimeRemaining);
Run Code Online (Sandbox Code Playgroud)

从理论上讲,您可以将其放入线程中,并在应用终止之前大约一秒钟执行自定义代码。有关更多信息,请参见我的博客文章:

http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html


kam*_*soc 3

我认为您不会收到任何反馈表Suspended状态。挂起意味着应用程序位于内存中,但目前没有代码正在执行。

文档

该应用程序位于内存中,但未执行代码。系统会暂停处于后台且没有任何待完成任务的应用程序。系统可以随时清除挂起的应用程序,而无需唤醒它们为其他应用程序腾出空间。

所以根据我的理解,如果一个应用程序会给你一个类似的回调,applicationDidEnterSuspendedState这将是一个悖论,原因Suspended状态意味着没有代码被执行。

  • 得到了悖论。然而,像“applicationWillEnterSuspishedState”这样的方法是有意义的。 (8认同)