如何判断 iPhone 应用程序是不是通过后台启动

Posted

技术标签:

【中文标题】如何判断 iPhone 应用程序是不是通过后台启动【英文标题】:How to tell if iPhone application was launched by backgrounding or not如何判断 iPhone 应用程序是否通过后台启动 【发布时间】:2010-07-14 05:57:09 【问题描述】:

我的应用程序使用 NSUserDefaults 来存储一些值,以便它可以在应用程序更新或后台退出时恢复它们。后台自动保存我的整数值,但如果用户从启动器退出应用程序,数字也会丢失,并且我猜在进入后台时不会调用 ViewDidUnload 方法。有没有一种方法可以在应用程序卸载时保存 NSUserDefaults。此外,ViewDidLoad 方法也有同样的问题,它不会从后台调用。有什么办法解决这个问题?

附:到目前为止,我的应用程序需要保存的唯一数据是用于屏幕计数的 int。

更新:UIApplicationDidEnterBackgroundingNotification 非常适合您的建议!

【问题讨论】:

谢谢大家!我只是很惊讶。我喜欢 Stack Overflow,我从未到过任何其他地方,您可以如此迅速地获得如此多的相关帮助。 【参考方案1】:

您无法在数据最终被杀死之前立即保存数据,但您可以在 applicationDidEnterBackground: 应用委托中保存“以防万一”状态。

还有 applicationDidBecomeActive:,但没有理由从那里加载您的保存数据,因为当从后台应用程序调用它时,数据将以任何方式保留。

【讨论】:

如果您不想要应用委托中的逻辑,还有一个 DidEnterBackground 通知。 好的,所以你告诉我每次都在 applicationDidEnterBackground: 上调用 NSUserDefaults,然后只从 viewDidLoad 上的默认值更新?天才!【参考方案2】:

您无法判断您的应用是否是从后台启动的,至少目前是如何设置的,因为如果您的应用委托是从跳板启动的,它将获得相同的事件序列。

正如 Joost 所说,您应该在 applicationDidEnterBackground 回调中保存恢复状态所需的任何内容;本质上,您应该假设这是您的应用在被邪恶的进程收割者无情地杀死之前收到的最后一条消息。

您应该查看WWDC 2010 Session Videos,特别是第 105 节 - 在 iPhone OS 上采用多任务处理,第 1 部分以获得详尽的解释。

【讨论】:

感谢会议视频的建议!我喜欢这些视频,我会去看看 :)

以上是关于如何判断 iPhone 应用程序是不是通过后台启动的主要内容,如果未能解决你的问题,请参考以下文章

android 监听屏幕是不是被触碰过?

通过在 iOS 中摇动手机在后台启动进程

在将 iPhone 应用程序带回前台后,如何判断当前的 UIView/UIController 是啥?

如何判断 iPhone 用户是不是在睡觉?

如何判断 iPhone 用户是不是在睡觉?

使用*标准*定位服务的后台 iOS 应用程序是不是会在设备重新启动时重新启动?