在我的应用程序中,当用户点击主页按钮时,我将数据保存在NSUserDefaults
中。应用程序在后台运行。当用户重新启动应用程序时,我使用方法applicationWillEnterForeground
来显示已保存的数据。
然而,当用户双击主页按钮并通过在应用程序上选择减号退出应用程序时,我需要在相同的用户默认值中保存不同的数据。但是当我退出时,有时会调用应用程序applicationWillTerminate
,有时不会调用。
那么,我如何区分应用程序只是最小化还是退出?
答案 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键或切换到另一个应用程序来最小化应用程序,就会调用它。