区分applicationDidEnterBackground和applicationWillTerminate

时间:2012-05-07 05:23:54

标签: iphone objective-c ios cocoa-touch uiapplicationdelegate

在我的应用程序中,当用户点击主页按钮时,我将数据保存在NSUserDefaults中。应用程序在后台运行。当用户重新启动应用程序时,我使用方法applicationWillEnterForeground来显示已保存的数据。

然而,当用户双击主页按钮并通过在应用程序上选择减号退出应用程序时,我需要在相同的用户默认值中保存不同的数据。但是当我退出时,有时会调用应用程序applicationWillTerminate,有时不会调用。

那么,我如何区分应用程序只是最小化还是退出?

6 个答案:

答案 0 :(得分:7)

每当用户点击一次,然后应用程序将在后台运行 applicationDidEnterBackground 始终调用。在此方法中,您可以临时更新/存储NSUserDefaults值。

如果有这种情况,应用程序将再次进入前台而不使用双击终止, applicationDidBecomeActive 将调用,您可以再次更新/删除临时存储的NSUserDefaults值。如果用户通过双击退出应用程序,则存储的值将保留在NSUserDefaults中。

答案 1 :(得分:5)

关于UIApplicationDelegate方法之间的差异,请参阅UIApplicationDelegate Protocol Reference。按下主页按钮时将始终调用applicationDidEnterBackground:。但似乎不能保证调用applicationWillTerminate:

如果您的应用未在前台运行,则可以是后台模式,也可以是暂停模式。请参阅iOS App Programming Guide - App States and Multitasking的“应用启动周期”部分。

当应用程序在后台和监视事件中运行时,applicationWillTerminate:将在终止时被调用。当应用程序暂停时,它不会。请参阅“应用程序终止”部分中的说明:

  

即使您使用iOS SDK 4及更高版本开发应用程序,仍然必须准备好让您的应用程序在没有任何通知的情况下被杀死。用户可以使用多任务UI显式杀死应用程序。此外,如果内存受限制,系统可能会从内存中删除应用程序以腾出更多空间。 暂停的应用程序不会收到终止通知,但如果您的应用当前正在后台运行(并且未暂停),则系统会调用您的应用代表的applicationWillTerminate:方法。您的应用无法请求此方法的额外后台执行时间。

答案 2 :(得分:1)

applicationDidEnterBackground - 每当用户按主页按钮时,应用程序将在后台进入后台,它将调用applicationDidEnterBackground方法。只要用户通过按Home键或切换到另一个应用程序来最小化应用程序,就会调用它。

applicationWillTerminate - 只有在应用程序的进程被实际终止时才会调用它。也就是说,用户使用任务切换器中的红色减去关闭按钮来杀死它,或者系统本身在后台杀死它(例如在低内存条件下)。您的应用无法通过此方法请求额外的后台执行时间。

答案 3 :(得分:1)

applicationDidEnterBackground - 当用户通过按主页按钮将应用程序设置为后台时,将调用此方法。

applicationWillTerminate - 当用户通过按下红色减号按钮退出处于后台模式的应用程序时,将调用此方法。

答案 4 :(得分:0)

支持后台执行的应用程序,当用户退出应用程序时通常不调用此方法,因为在这种情况下应用程序只是移动到后台

如果您需要保存的数据比应用程序进入后台时应该保存的数据。

答案 5 :(得分:0)

applicationWillTerminate仅在应用程序'过程实际上已经被杀死也就是说,用户使用任务切换器中的红色减去关闭按钮来杀死它,或者系统本身在后台杀死它(例如在低内存条件下)。

根据您的需要,applicationDidEnterBackground是首选;只要用户通过按Home键或切换到另一个应用程序来最小化应用程序,就会调用它。