如何确定我的应用程序何时即将在后台终止?

时间:2011-06-24 18:22:39

标签: iphone ios cocoa-touch

当我的应用程序移到后台时,我希望能够检测到它何时被终止(因为内存耗尽或其他原因)。有没有办法做到这一点?

特别是,有一种方法可以在应用程序在后台终止之前执行某些代码吗?

3 个答案:

答案 0 :(得分:4)

您可以在应用程序委托的-[<UIApplicationDelegate> applicationWillTerminate:]方法中执行此操作,如下所示:

- (void)applicationWillTerminate:(UIApplication *)application {
    [database save]; // or whatever you want to do
}

这将在应用程序即将终止时执行,除非它崩溃。

答案 1 :(得分:4)

最好的办法是在应用程序转换到后台时,在应用程序中执行任何需要进行的清理工作(保存状态或用户数据等)。如果您的申请被暂停,您将无法在系统终止之前执行任何最后的代码。

来自iOS Application Programming Guide

  

如果您的应用程序正在运行(或者   在前景或背景)   终止时间,系统调用   你的申请代表   applicationWillTerminate:方法如此   你可以执行任何所需的   清理。您可以使用此方法   保存用户数据或应用程序状态   您将使用的信息   恢复你的应用程序   随后发布的当前状态。   你的方法实现有   执行任何约5秒钟   任务和回归。如果没有   及时返回,申请是   杀死并从内存中删除。该   applicationWillTerminate:方法是   如果您的申请是,则不会被呼叫   目前暂停。

     

即使您开发了应用程序   使用iOS SDK 4及更高版本,您必须   仍然为您的申请做好准备   在没有任何通知的情况下被杀死   用户可以杀死应用程序   显式使用多任务UI。   另外,如果记忆变成了   约束,系统可能会删除   应用程序从内存中获取更多   房间。如果您的申请目前   暂停,系统杀死你的   应用程序并将其从内存中删除   没有任何通知。但是,如果你的   应用程序目前正在运行   背景状态(换句话说,   没有暂停),系统调用   applicationWillTerminate:方法   你的申请代表。您的   申请不能要求额外的   后台执行时间   方法

答案 2 :(得分:1)

取决于。

如果您的意思是在后台暂停申请时收到通知,则无法知道;如果您被暂停,则不会运行applicationWillTerminate:方法。建议的方法是在收到applicationWillEnterBackground:消息时保存所有必需的状态,这样如果你在后台被杀,你就可以重新开始了。

如果您实际处于“在后台执行”状态(退出应用程序后可能会短暂发生或者应用程序请求临时后台执行时间),那么applicationWillTerminate: 将< / em>就像你期望的那样被召唤。