17

检测应用程序何时关闭的委托方法是什么。

我的意思是当用户点击这个按钮时:

在此处输入图像描述

我知道以下方法:

- (void)applicationDidEnterBackground:(UIApplication *)application;

- (void)applicationWillEnterForeground:(UIApplication *)application;

但在我的情况下,它们的工作方式与我预期的不同。例如,我使用了我的应用程序并导航到了某个屏幕。如果我锁定屏幕并返回应用程序,应用程序调用 applicationWillEnterForeground 但我不需要这个,因为我仍在此视图中(例如测试屏幕视图)并且我不需要检查任何更改。但是,如果我的应用程序关闭,我会开始从启动应用程序(例如主屏幕)导航。因此,如果我的应用程序已关闭并且我在主屏幕上,我需要检查之前是否有一些操作(例如,如果我通过了测试屏幕视图的测试)并呈现此视图控制器(仅在我关闭应用程序的情况下)只是锁定它或进入背景)。

感谢帮助。

4

4 回答 4

23

你无法检测到这一点。从iOS 应用程序编程指南(“应用程序终止”标题):

重要提示:applicationWillTerminate:如果您的应用当前处于挂起状态,则不会调用该方法。

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

于 2013-07-24T17:45:43.030 回答
10

你不能。当您的应用程序以这种方式被杀死时,它不会被告知任何事情。该应用程序被操作系统杀死,没有任何警告。

当您的应用程序进入后台时,您无法知道是重新启动还是简单地返回前台。因此,当应用程序进入后台时,您必须正确处理事情。

当应用程序再次启动时,恢复您需要的任何状态。

于 2013-07-24T17:33:44.390 回答
2

在 iOS 上,您无法检查。那就是:进程被SIGKILL'ed。我知道可能能够工作的一种方法依赖于这样一个事实,即要杀死一个应用程序,必须首先通过按下主页按钮来暂停它。

因此,您可以在用户使用应用程序时收集您的操作,在用户暂停应用程序时将其提交到保存的位置。如果用户恢复,请重置列表并再次开始收集信息。但是,如果用户暂停了应用程序并且您从未收到简历,那么在下一次应用程序启动时,您可以阅读列表并从那里恢复。

高温高压

于 2013-07-24T17:35:06.330 回答
2

您可以实现委托的-applicationWillTerminate:方法UIApplicationDelegate来响应终止事件。但是,不能保证在所有情况下都会调用它,所以你不应该依赖它被调用。根据iOS App Programming Guide

如果您的应用程序在终止时正在运行(在前台或后台),系统会调用您的应用程序委托的applicationWillTerminate:方法,以便您可以执行任何所需的清理。您可以使用此方法保存用户数据或应用程序状态信息,以便在后续启动时将应用程序恢复到当前状态。您的方法有大约 5 秒的时间来执行任何任务并返回。如果它没有及时返回,应用程序将被杀死并从内存中删除。

重要提示:applicationWillTerminate:如果您的应用当前处于挂起状态,则不会调用该方法。

于 2013-07-24T17:43:50.790 回答