2013-07-24 51 views
16

什么是检测应用何时关闭的委托方法。iOS如何检测应用何时从进程中删除

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

enter image description here

我知道下面的方法:

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

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

但他们的工作并不如我所料在我的案件。例如,我用我的应用程序,我已导航到某个屏幕。如果我锁定屏幕并返回应用程序,应用程序会调用applicationWillEnterForeground,但我不需要这样做,因为我仍然处于此视图中(例如测试屏幕视图),我不需要检查任何更改。但如果我的应用程序关闭,我开始从例如主屏幕的启动应用程序导航。因此,如果我的应用程序已关闭,并且正在主屏幕上,则需要检查以前是否有某些操作(例如,如果我在测试屏幕视图上通过了测试)并显示此视图控制器(仅在情况下,如果我已关闭应用程序NOT只是锁定它或进入背景)。

感谢您的帮助。

回答

18

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

重要提示:如果您的应用程序目前已被暂停的applicationWillTerminate:方法不叫。

即使您使用iOS SDK 4及更高版本开发您的应用程序,您仍然必须准备好 ,以便您的应用程序在没有任何通知的情况下被杀死。 用户可以使用多任务界面显式杀死应用程序。另外,如果内存变得受限,系统可能会从内存中删除应用程序以腾出更多空间。暂停的应用不通知 终止,但如果您的应用程序正在后台 运行状态(而不是中止),系统调用 applicationWillTerminate:您的应用程序委托的方法。您的应用程序无法通过此方法请求额外的后台执行时间 。

+0

感谢您的帖子。这有帮助! – kakyo

+1

过时的链接:) [也许这个人会做的伎俩!(https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/ DOC/UID/TP40007072-CH2-SW7) – Jissay

9

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

当你的应用程序进入后台时,你无法知道是否会新鲜开始或只是返回前台。因此,当应用程序进入后台时,您必须正确处理这些事情。

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

2

在iOS上,您无法检查该问题。那就是:这个过程是SIGKILL的。我知道可以工作的一种方法依赖于杀死应用程序的事实,必须先按下主页按钮暂停应用程序。

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

HTH

2

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

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

重要提示:如果您的应用程序当前处于暂停状态,则不会调用applicationWillTerminate:方法。

+0

这里重要的一点是,如果您想要最好的机会检测到这一点,则需要始终保持您的应用程序在后台保持活动状态。东西可能是不适合的App Store应用的一个选项(但可能是不需要审批非App Store的应用程序)。 – Nate

相关问题