4

Apple 的“应用程序状态和多任务处理”文档(“移至后台时的操作”一节)说,当应用程序进入后台时进行保存:

保存用户数据和应用状态信息。进入后台时,所有未保存的更改都应写入磁盘。这一步是必要的,因为您的应用程序可能会由于多种原因在后台被悄悄杀死。您可以根据需要从后台线程执行此操作。

当我开始调度操作时,例如保存需要一些时间,applicationDidEnterBackground:如下所示,按下主页按钮时我没有得到 NSLog 输出。返回应用程序后,会出现 NSLog 输出。

- (void)applicationDidEnterBackground:(UIApplication *)application {
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         [self performOperation];
         NSLog(@"Operation finished");
      });
}

我可以确定该performOperation方法已完全执行还是在应用程序进入睡眠模式时中断?

4

2 回答 2

6

确保您将plist密钥设置UIApplicationExitsOnSuspend设置为 no 以确保applicationDidEnterBackground被调用。

接下来确保您开始一个长时间运行的任务。在您的情况下,它看起来像这样:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   UIBackgroundTaskIdentifier __block bgTask = nil;
   UIApplication  *app = [UIApplication sharedApplication];
   bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
         [app endBackgroundTask:bgTask]; 
         bgTask = UIBackgroundTaskInvalid;
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         [self performOperation];
         NSLog(@"Operation finished");
     });
 }

这样,您就告诉应用程序在您完成时停留 10 分钟。在十分钟结束时,到期处理程序被调用。

此外,您可以设置所需的后台模式键以获得更多时间。有许多技巧和变体可以让你有更多时间使用我上面提到的东西。

于 2013-03-04T23:02:11.530 回答
0

为了确定,我将使用不同类型的日志记录:

灵活的 iOS 日志记录

通过将此日志添加到您的项目中,您可以通过转到管理器 -> 设备 -> “您的设备” -> 控制台来检查项目的日志,无论您是否正在调试。

我认为这是最好的方法,当我不确定我是否可以调试某些东西时,它对我有很大帮助。

于 2013-03-04T23:06:39.783 回答