区分applicationDidEnterBackground和applicationWillTermimate

问题描述:

在我的应用程序中,当用户点击home按钮时,我将数据保存在NSUserDefaults中。应用程序正在后台运行。当用户重新启动应用程序时,我使用方法applicationWillEnterForeground来显示保存的数据。区分applicationDidEnterBackground和applicationWillTermimate

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

那么,我该如何区分应用程序是最小化还是退出?支持后台执行

+0

您可以使用applicationDidEnterBackground,一旦主页按钮被按下,此方法总是被调用。 – rishi

+0

@rishi看来,真正的问题是,为什么'applicationWillTerminate'有时候不会在应用程序终止时调用... – Hailei

+0

是的,但我怎么知道应用程序是最小化或退出?我想为这两种不同的条件保存不同的数据。 –

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

如果在情况下,应用程序会再来的前景与出通过使用双水龙头终止,applicationDidBecomeActive将调用,您可以在其中再次更新/删除临时存储值NSUserDefaults的。如果用户通过双击退出应用程序,则存储值将与NSUserDefaults保持一致。

应用,一般不会当用户退出应用程序,因为应用程序只需移动到在这种情况下在后台调用此方法

如果有需要保存比你的数据应该在应用进入后台时执行此操作。

applicationWillTerminate仅在应用程序进程实际上被终止时才被调用。也就是说,用户使用任务切换器中的红色减号关闭按钮来杀死它,或者系统在后台(例如,在低内存条件下)杀死它。

根据您的需要,applicationDidEnterBackground是首选;只要用户通过按主页按钮或切换到其他应用程序来最小化应用程序,它就会被调用。

关于UIApplicationDelegate方法的区别,请参考UIApplicationDelegate Protocol Reference。当主页按钮被按下时,总是会调用applicationDidEnterBackground:。但似乎applicationWillTerminate:不保证被调用。

如果您的应用程序未在前台运行,则它可以处于后台模式或挂起模式。请参阅iOS App Programming Guide - App States and Multitasking的“App启动周期”部分。

当应用程序在后台运行并监视事件时,applicationWillTerminate:将在终止时调用。当应用程序被暂停时,它不会。见描述“终止应用程序”部分:

即使你使用的是iOS SDK 4开发你的应用和以后,你仍然必须为您的应用程序准备没有任何通知被杀死。用户可以使用多任务界面显式杀死应用程序。另外,如果内存受到限制,系统可能会从内存中移除应用程序以腾出更多空间。 暂停应用程序未收到终止通知,但如果您的应用程序当前正在后台运行(并且未挂起),系统会调用您的应用程序代理的applicationWillTerminate:方法。您的应用程序无法从此方法请求额外的后台执行时间。

applicationDidEnterBackground - 每当用户按按钮,应用程序会在后台去,当时它叫applicationDidEnterBackground方法。只要用户通过按主页按钮或切换到其他应用程序来最小化应用程序,它就会被调用。

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

applicationDidEnterBackground - 当用户通过按下home按钮将应用程序设置为背景时,将调用此方法。

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