8

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

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

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

4

6 回答 6

7

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

如果万一,应用程序将再次进入前台而不使用双击终止,applicationDidBecomeActive将调用,您可以再次更新/删除临时存储的 NSUserDefaults 值。如果用户通过双击退出应用程序,存储的值将与 NSUserDefaults 一起保存。

于 2012-05-07T05:37:04.613 回答
5

关于UIApplicationDelegate方法之间的区别,请参考UIApplicationDelegate 协议参考applicationDidEnterBackground:将始终在按下主页按钮时调用。但似乎applicationWillTerminate:不能保证被调用。

如果您的应用程序没有在前台运行,它可以处于后台模式或挂起模式。请参阅iOS 应用程序编程指南 - 应用程序状态和多任务处理的“应用程序启动周期”部分。

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

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

于 2012-05-07T05:44:26.667 回答
1

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

applicationWillTerminate - 仅当应用程序的进程实际被杀死时才调用。也就是说,用户使用任务切换器中的红色减号关闭按钮将其杀死,或者系统本身在后台(例如在内存不足的情况下)将其杀死。您的应用无法通过此方法请求额外的后台执行时间。

于 2012-05-07T05:47:34.657 回答
1

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

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

于 2012-05-07T06:35:37.997 回答
0

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

如果有数据需要保存,则应在应用程序进入后台时保存。

于 2012-05-07T05:36:27.747 回答
0

applicationWillTerminate仅当应用程序的进程实际被杀死时才调用。也就是说,用户使用任务切换器中的红色减号关闭按钮将其杀死,或者系统本身在后台(例如在内存不足的情况下)将其杀死。

适合您的需求,applicationDidEnterBackground是首选;每当用户通过按下 Home 按钮或切换到另一个应用程序来最小化应用程序时,都会调用它。

于 2012-05-07T05:37:33.327 回答