背景
我的应用程序的用户对我的应用程序执行了某些操作,该应用程序使用一些完成处理程序安排异步 AFNetworking HTTP 请求。
然后,我的应用程序的用户立即进入主屏幕,因此我的应用程序进入后台。
网络非常慢,所以我的应用会在 20 秒后收到响应,这意味着网络响应会在我的应用处于后台状态时到达。
问题
这个网络请求会发生什么,特别是它的完成处理程序?
我知道,dispatch_async 保留了传递给它的块的所有东西,所以我希望我的响应的完成处理程序在某个时候被执行,是这样吗?
附言
我不是指打算在应用程序处于后台时运行的异步 HTTP 请求,而是指在应用程序处于正常状态时执行的常规异步 HTTP 请求。
更新 1
我确实在相关主题中找到了部分答案:当应用程序在 iOS 中进入非活动/后台/挂起状态时,调度队列中的任务会发生什么?.
我很快就会引用它:
当一个应用程序被挂起时,整个过程都被冻结了……存在于预挂起 GCD 队列中的任务在恢复时不会消失。他们从未离开;他们只是暂停了。
我尝试过的最简单的测试如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
double delayInSeconds = 10.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSLog(@"I am alive!");
});
return YES;
}
如果我启动这个应用程序,然后立即进入后台,然后等待足够的时间(这样可以通过 10 秒),然后激活它 - 我看到 NSLog 消息如何出现在控制台中。
我仍然不明白这如何应用于延迟的 HTTP 响应 - 如果应用程序被冻结 - 那么它们是如何处理的?如果有人知道应用程序向后台的转换如何影响它处理延迟的 HTTP 响应的方式,请分享您的知识!