如何确定iOS是否已杀死我的应用

时间:2014-01-23 15:48:40

标签: ios cocoa-touch

如果我将我的iPhone应用程序置于后台并在4或5小时后将其恢复到前台,则会从头开始启动,而不是显示之前访问过的页面。但是如果我在2或3小时内将应用程序带到前台,它会显示以前访问过的页面。如何确定iOS是否会杀死我的应用程序,或者由于其他原因导致其崩溃。

2 个答案:

答案 0 :(得分:1)

“被杀”是一个严厉的术语,可能不适合发生的事情。 iOS应用程序可以处于5种状态,您可以在应用程序委托中接收消息,通知您所在的消息。在应用程序暂停时,您使用的内存可以由操作系统回收使用在其他应用程序中这可能是你认为你看到的“崩溃”。

此外,您的应用可能太慢而无法转换到背景状态,因此可能会被杀死。最好的办法是在分析器中运行您的应用程序,以确定它是否实际崩溃,或者是否正在回收内存。 (提示:如果你在关闭应用程序后几分钟重新打开应用程序并且没关系 - 并且你没有有意识地进行任何真正的后台处理 - 那么它可能只是被回收的内存。)

iOS App Programming Guide详细解释了这一点,为方便起见,我在这里复制相关方法。

  • application:willFinishLaunchingWithOptions: - 这个方法是你的应用程序第一次在发布时执行代码。
  • application:didFinishLaunchingWithOptions: - 此方法允许您在向用户显示应用程序之前执行任何最终初始化。
  • applicationDidBecomeActive: - 让您的应用知道它即将成为前台应用。使用此方法进行最后一分钟准备。
  • applicationWillResignActive: - 让您知道您的应用正在转变为前景应用。使用此方法可将您的应用置于静止状态。
  • applicationDidEnterBackground: - 让您知道您的应用现在正在后台运行,并且可能会随时暂停。
  • applicationWillEnterForeground: - 让您知道您的应用程序正在移出后台并返回到前台,但它尚未激活。
  • applicationWillTerminate: - 让您知道您的应用已被终止。如果您的应用被暂停,则不会调用此方法。

答案 1 :(得分:1)

正如Macmade在他的评论中所建议的那样,您可以在应用中放置C UNIX信号处理代码以响应终止信号。

然而,Apple并不打算让你这样做。当您收到通知您正在移动到后台时,您应该完全保存应用程序的状态,以便您可以恢复它。

当你处于后台时,iOS可以随时终止你,因为内存压力而没有警告。有时你会从后台返回,有时你会重新启动。

另一种选择:

如果设备是Xcode中的开发设备,您可以连接它并打开控制台日志以查看是否崩溃。