iOS 长时间不活动后的应用生命周期

iOS app life cycle after long periods of time of inactivity

我有一个应用程序(用 Swift 编写)当前在用户转到特定视图后崩溃然后关闭应用程序或关闭设备几个小时。

我想知道应用程序长时间不活动后会发生什么情况:

我发现很难测试,因为为了重现这个问题,我必须在处于特定视图时关闭设备,然后关闭或关闭几个小时。

从另一个角度来看,崩溃日志显示如下:

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Exception Note:  SIMULATED (this is NOT a crash)
Highlighted by Thread:  0

Application Specific Information:
matt.myApp-v2 failed to launch after 20.00s (launchIntent: foreground-interactive)

Elapsed total CPU time (seconds): 2.030 (user 2.030, system 0.000), 5% CPU 
Elapsed application CPU time (seconds): 0.006, 0% CPU

....

Error Formulating Crash Report:
Failed while requesting activity/breadcrumb diagnostics

您遇到的问题是因为 iOS 动态处理设备内存。如果用户打开需要大量内存的应用程序,它可以在后台关闭您的应用程序以释放可用内存。

如果用户返回您的应用,它将像第一次打开应用一样再次启动,或者如果用户在应用切换器中关闭了您的应用。

您需要熟悉 Apple this documentation 中描述的 App Life Cycle。它描述了应用程序中的不同状态以及应用程序恢复时调用的代码activity。

我的猜测是您的视图正在调用应用程序恢复时未初始化的内容 activity,因此导致应用程序崩溃。

要获得更多调试信息,您应该让您的用户向您发送崩溃报告。如果该应用程序在 App Store 上分发,他或她应该启用数据和诊断以按照描述的方式发送它们 in this question

0x000000008badf00d

这是应用看门狗的硬编码错误。 "Ate bad food".

这意味着您的应用在启动时被终止,因为 application:didFinishLaunchingWithOptions: 函数到 return 花费的时间太长。

我的猜测是您正在那里进行长时间的核心数据调用或网络请求。

这里的崩溃是在启动时发生的。不是长时间后发生的崩溃。

我怀疑您的应用程序由于来自另一个应用程序的内存压力而被 OS 终止,但是当启动该应用程序时试图继续做一些它实际上不再做的事情并卡在某个地方.

你的 application:didFinishLaunchingWithOptions: 功能是做什么的?