出动applicationDidEnterBackground保存操作:(Dispatched Sa

2019-08-17 07:23发布

苹果公司的文档“应用国和多任务处理” (见“怎么办时,移动到后台”)说的,当应用程序被切换到后台保存:

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

当我开始派遣操作例如,用于保存这需要一些时间applicationDidEnterBackground:像下面按home键时,我没有得到的NSLog输出。 返回到应用程序后,将显示的NSLog输出。

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

我可以肯定的是, performOperation完全执行的方法还是根本中断时,应用程序进入睡眠模式?

Answer 1:

请确保您有plist键设置UIApplicationExitsOnSuspend设置为无,确保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分钟,同时完成了。 在十分钟结束时到期处理程序被调用。

此外,您可以设置所需要的背景模式键,以获得更多的时间。 有许多关于这个黑客和变化,可以使用我上面提到的东西,让你更多的时间。



Answer 2:

我将使用不同类型的记录只是可以肯定的:

灵活的iOS记录

通过添加该记录到你的项目,你可以检查你的项目的日志,不管,如果你是要管理调试与否 - >设备 - >“您的设备” - >控制台。

我觉得这是最好的方式,它已帮助了我很多,当我不知道我是否可以调试的东西。



文章来源: Dispatched Saving operations on applicationDidEnterBackground: