在我的应用程序中,当用户点击主页按钮时,我将数据保存在NSUserDefaults
. 应用程序正在后台运行。当用户重新启动应用程序时,我使用该方法applicationWillEnterForeground
显示保存的数据。
但是,当用户双击主页按钮并通过在应用程序上选择减号退出应用程序时,我需要在同一用户默认值中保存不同的数据。但是当我退出时applicationWillTerminate
,有时会调用应用程序,有时不会。
那么,如何区分应用程序只是最小化还是退出呢?
在我的应用程序中,当用户点击主页按钮时,我将数据保存在NSUserDefaults
. 应用程序正在后台运行。当用户重新启动应用程序时,我使用该方法applicationWillEnterForeground
显示保存的数据。
但是,当用户双击主页按钮并通过在应用程序上选择减号退出应用程序时,我需要在同一用户默认值中保存不同的数据。但是当我退出时applicationWillTerminate
,有时会调用应用程序,有时不会。
那么,如何区分应用程序只是最小化还是退出呢?
每当用户只点击一次,应用程序就会进入后台,此时applicationDidEnterBackground总是调用。在这种方法中,您可以临时更新/存储您的 NSUserDefaults 值。
如果万一,应用程序将再次进入前台而不使用双击终止,applicationDidBecomeActive将调用,您可以再次更新/删除临时存储的 NSUserDefaults 值。如果用户通过双击退出应用程序,存储的值将与 NSUserDefaults 一起保存。
关于UIApplicationDelegate
方法之间的区别,请参考UIApplicationDelegate 协议参考。applicationDidEnterBackground:
将始终在按下主页按钮时调用。但似乎applicationWillTerminate:
不能保证被调用。
如果您的应用程序没有在前台运行,它可以处于后台模式或挂起模式。请参阅iOS 应用程序编程指南 - 应用程序状态和多任务处理的“应用程序启动周期”部分。
当应用程序在后台运行并监视事件时,applicationWillTerminate:
将在它终止时调用。当应用程序被暂停时,它不会。请参阅“应用程序终止”部分中的说明:
即使您使用 iOS SDK 4 及更高版本开发您的应用程序,您仍然必须准备好您的应用程序在没有任何通知的情况下被终止。用户可以使用多任务 UI 明确地终止应用程序。此外,如果内存受到限制,系统可能会从内存中删除应用程序以腾出更多空间。暂停的应用程序不会收到终止通知,但如果您的应用程序当前在后台状态下运行(并且未暂停),系统会调用
applicationWillTerminate:
您的应用程序委托的方法。您的应用无法通过此方法请求额外的后台执行时间。
applicationDidEnterBackground - 每当用户按下主页按钮时,应用程序将进入后台,此时它调用 applicationDidEnterBackground 方法。每当用户通过按下 Home 按钮或切换到另一个应用程序来最小化应用程序时,都会调用它。
applicationWillTerminate - 仅当应用程序的进程实际被杀死时才调用。也就是说,用户使用任务切换器中的红色减号关闭按钮将其杀死,或者系统本身在后台(例如在内存不足的情况下)将其杀死。您的应用无法通过此方法请求额外的后台执行时间。
applicationDidEnterBackground - 当用户通过按下主页按钮将应用程序设置为后台时,将调用此方法。
applicationWillTerminate - 当用户按下红色减号按钮退出处于后台模式的应用程序时,将调用此方法。
支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台
如果有数据需要保存,则应在应用程序进入后台时保存。
applicationWillTerminate
仅当应用程序的进程实际被杀死时才调用。也就是说,用户使用任务切换器中的红色减号关闭按钮将其杀死,或者系统本身在后台(例如在内存不足的情况下)将其杀死。
适合您的需求,applicationDidEnterBackground
是首选;每当用户通过按下 Home 按钮或切换到另一个应用程序来最小化应用程序时,都会调用它。