36

在 iOS 4.0 中没有调用 applicationWillTerminate 委托方法 当我点击 Home 按钮时,我看到调用了 applicationWillResignActive 和 applicationDidEnterBackground 委托方法。

 - (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}

当我双击主页按钮并再次启动应用程序时,我发现正在调用 applicationWillEnterForeground 和 applicationDidBecomeActive 委托方法。

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
  NSLog(@"Application Will Enter Foreground");
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{
  NSLog(@"Application Did Become Active");
}

但我想知道何时会调用 applicationWillTerminate 委托方法,我会在其中执行一些数据库/文件备份例程。

- (void)applicationWillTerminate:(UIApplication *)application{

}

我什至尝试点击减号并删除在后台运行的应用程序,但它仍然没有调用任何委托方法。

有任何想法吗 ???

4

4 回答 4

52

来自 iPhone 应用程序编程指南:

即使您使用 iPhone SDK 4 及更高版本开发应用程序,您仍然必须为您的应用程序终止做好准备。如果内存受到限制,系统可能会从内存中删除应用程序以腾出更多空间。如果您的应用程序当前处于挂起状态,系统会从内存中删除您的应用程序,恕不另行通知。但是,如果您的应用程序当前正在后台运行,系统会调用applicationWillTerminate:应用程序委托的方法。您的应用程序无法从此方法请求额外的后台执行时间。

所以是的,applicationWillTerminate:通常不会在 iOS 4 中经常调用。如果你必须保存数据,你应该在applicationWillTerminate:applicationDidEnterBackground:.

于 2010-06-29T10:06:07.367 回答
4

WWDC 2010 Session Adopting Multitasking on iPhone OS第 2 部分)很好地解释了应用程序状态转换。

于 2010-06-29T14:25:17.423 回答
2

当用户在 iOS4 中点击 Home 按钮时,我得到了一种终止应用程序的解决方案。这将调用 applicationWillTerminate 委托方法,而不是进入后台进程。

  1. 打开你的 info.plist 文件
  2. 添加关键 UIApplicationExitsOnSuspend
  3. 将新密钥设置为 YES
于 2010-07-03T18:09:38.520 回答
1

实际上,您也可以使用此步骤来执行此操作。

  1. 打开你的 info.plist 文件
  2. 添加密钥 -> 应用程序不在后台运行
  3. 将此键值设置为 YES
于 2011-04-28T17:32:20.170 回答