我正在使用Xcode版本4.2.1和iOS 5.0中的项目。我想知道当你完全终止一个应用程序时将调用哪个函数,这意味着甚至用户强制在后台运行的应用程序从主屏幕终止的时间。我假设
(void)applicationWillTerminate:(UIApplication *)application
会被调用,但事实证明,即使在后台终止应用程序后也没有调用它。 我基本上想要做的是调用我在应用程序完全终止之前创建的方法,因此需要知道在应用程序结束时调用哪个函数。
谢谢。
答案 0 :(得分:20)
" applicationWillTerminate "只有当应用程序在终止时未处于挂起状态时才会调用方法。
要理解这一点,考虑到当前您的应用程序处于前台活动状态,请执行以下两种情况:
案例1 当您单击主页按钮时,应用会通过调用方法直接进入暂停状态 - (1)applicationWillResignActive然后(2)applicationDidEnterBackground。
现在,当您尝试退出/终止应用时,通过双击主页按钮,然后从最近的应用屏幕向上滑动当前应用屏幕,应用处于暂停状态。那么," applicationWillTerminate "方法不会被调用。
案例2 当您双击主页按钮时,应用会通过调用方法进入非活动状态 - (1)applicationWillResignActive。
现在,当您尝试退出/终止应用时,通过从最近的应用屏幕向上滑动当前应用屏幕,应用在终止时处于非活动状态(未处于挂起状态)。那么," applicationWillTerminate "方法将被调用。
有关此外观的更多信息 - Apple's Official Documentation on applicationWillTerminate(_:)
答案 1 :(得分:5)
Here's a good overview应用程序生命周期通知&在iOS 4.0及更高版本上委派消息。简而言之......
您的应用通常永远不会看到 willTerminate ,因为系统通常只会在您的应用已暂停后(在后台)终止。一旦您的应用程序被暂停,它就没有机会采取行动(*),因此没有回调。
didEnterBackground 委托消息或通知应被视为您在可能终止之前清理或保存状态的最后机会。
(*)好吧,如果你的应用程序处于支持的后台执行模式之一(例如音频,VoIP或导航),你的应用程序可以执行操作,但在这种情况下,它还没有被暂停或者它已被取消暂停具有特定于该背景模式的入口点。
答案 2 :(得分:1)
如果该应用已暂停,则不会再收到通知。留意didEnterBackground
通知。
答案 3 :(得分:0)
- (void)applicationWillTerminate:(UIApplication *)application
它在UIApplicationDelegate协议中。
答案 4 :(得分:0)
documentation here说明了此案例的行为。
简而言之,如果应用程序在终止时正在运行(在前台或后台),您将只收到applicationWillTerminate:
消息。因此,除非您的应用程序在前台或长时间运行的后台模式(例如,VoIP,音频或由beginBackgroundTaskWithExpirationHandler
指示的长时间运行的任务)中运行,否则它将从background
转换很快地向suspended
状态陈述。在这种情况下,您永远不会收到applicationWillTerminate:
消息。