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

时间:2016-01-15 11:21:12

标签: ios swift lifecycle

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

我想知道在长时间不活动后该应用会发生什么:

  • 该应用是否尝试使用相同的视图? (我想是的)
  • 如果是,那么首先通过应用代表吗?
  • -viewDidLoad再次投放或仅-viewWillAppear
  • 如果设备完全关闭,当它重新开启并且用户尝试启动应用程序时,它是完全重启还是尝试从停止的地方开始?

我觉得很难测试,因为为了重新创建这个问题,我必须在某个视图上关闭设备,然后离开或者几个小时。

从不同的角度来看,崩溃日志显示以下内容:

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

2 个答案:

答案 0 :(得分:2)

  

0x000000008badf00d

这是应用程序监视程序的硬编码错误。 “吃不好的食物”。

这意味着您的应用程序在启动时被终止,因为application:didFinishLaunchingWithOptions:函数返回时间过长。

我的猜测是你在那里进行长期核心数据通话或网络请求。

这里的崩溃是在启动时。不是经过很长一段时间后发生的崩溃。

我怀疑你的应用程序由于来自另一个应用程序的内存压力而被操作系统终止,但是当启动应用程序时试图继续执行它不再实际执行的操作并且卡在某处。

您的application:didFinishLaunchingWithOptions:功能有什么作用?

答案 1 :(得分:1)

您面临的问题是iOS动态处理设备内存。如果用户打开需要大量内存的应用,它可以在后台关闭您的应用以获得可用内存。

如果用户返回您的应用,它将会像第一次打开应用或用户在应用切换器中杀死您的应用时再次启动。

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

我的猜测是,当应用程序恢复活动时,您的视图正在调用未初始化的内容,从而导致应用程序崩溃。

要获得进一步的调试信息,您应该要求您的用户向您发送崩溃报告。如果应用程序在App Store上发布,他或她应该启用Data&诊断程序可以像in this question所描述的那样发送它们。