Apple的"App States and Multitasking"文档(“移动到后台时应该做什么”一节)说当应用程序转到后台时保存:
保存用户数据和应用状态信息。进入后台时,应将所有未保存的更改写入磁盘。此步骤是必要的,因为您的应用可能会因为各种原因而在后台安静地被杀死。您可以根据需要从后台线程执行此操作。
当我开始调度操作时,例如对于保存需要花费一些时间在applicationDidEnterBackground:
,如下所示我按下主页按钮时没有得到NSLog输出。返回应用程序后,将显示NSLog输出。
- (void)applicationDidEnterBackground:(UIApplication *)application {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performOperation];
NSLog(@"Operation finished");
});
}
我可以确定performOperation
方法是完全执行还是在应用进入睡眠模式时中断?
答案 0 :(得分: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分钟。在十分钟结束时,将调用到期处理程序。
此外,您可以设置所需的背景模式键以获得更多时间。有很多黑客和变种,可以让你有更多的时间使用我上面提到的东西。
答案 1 :(得分:0)
我将使用不同类型的日志来确保:
通过将此日志记录添加到项目中,无论您是否正在调试,都可以通过转到管理器来检查项目的日志 - >设备 - > “您的设备” - >控制台。
我认为这是最好的方式,当我不确定是否可以调试时,它对我帮助很大。