首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用[NSURLSessionConfiguration backgroundSessionConfiguration]时是否有办法消除延迟?

在使用[NSURLSessionConfiguration backgroundSessionConfiguration]时是否有办法消除延迟?
EN

Stack Overflow用户
提问于 2014-02-19 04:24:43
回答 3查看 4.6K关注 0票数 2

我正在尝试运行一个后台NSURLSessionDownloadTask。然而,我注意到大约需要30秒才能真正开始任务。当我使用defaultSessionConfiguration时,任务几乎立即启动。是否有一种方法可以在使用NSURLSessionDownloadTask时立即触发backgroundSessionConfiguration?

下面是我使用backgroundSessionConfiguration时得到的结果:

代码语言:javascript
复制
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:[NSString stringWithFormat:bgIdentifier, self.urlModel.code]];

这是日志输出。请注意,“开始上传…”在调用“简历”方法之前立即记录,“上载进度”记录在NSURLSessionTaskDelegate的didSendData方法中。

代码语言:javascript
复制
2014-02-18 20:13:55.403 myapp[396:60b] [DoneViewController] Start uploading...
2014-02-18 20:14:17.699 myapp[396:60b] [DoneViewController] Upload progress - 1%
2014-02-18 20:14:17.704 myapp[396:60b] [DoneViewController] Upload progress - 2%
2014-02-18 20:14:17.705 myapp[396:60b] [DoneViewController] Upload progress - 3%
2014-02-18 20:14:17.706 myapp[396:60b] [DoneViewController] Upload progress - 4%

仅供参考,同样的事情,但与默认的会话配置。

代码语言:javascript
复制
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

您可以看到,控制台结果没有延迟,如下所示:

代码语言:javascript
复制
2014-02-18 19:57:00.552 myapp[376:60b] [DoneViewController] Start uploading...
2014-02-18 19:57:00.707 myapp[376:60b] [DoneViewController] Upload progress - 2%
2014-02-18 19:57:00.710 myapp[376:60b] [DoneViewController] Upload progress - 5%
2014-02-18 19:57:00.711 myapp[376:60b] [DoneViewController] Upload progress - 8%
2014-02-18 19:57:00.711 myapp[376:60b] [DoneViewController] Upload progress - 11%

编辑:使用iOS 7.1,有时不会出现延迟。然而,仍有大约20秒的延迟时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-11 03:01:24

虽然苹果根本没有记录它,但背景会话就是这样设计的。当另一个应用正在运行时,您就不能接管网络连接。iOS/Apple负责运行您的背景上传/下载,它认为它将提供最好的用户体验。想象一下,在尝试进行基本HTTP调用时,正在运行的应用程序和网络连接被另一个应用程序阻塞。我已经写了更多关于我的经验和什么时候使用这个功能。https://medium.com/@KyleRStewart/zombie-uploads-with-ios-dd3b1f6b66

票数 3
EN

Stack Overflow用户

发布于 2014-02-19 06:24:01

代码语言:javascript
复制
-(NSURLSession *)backgroundSession // For Background Download
{
static NSURLSession *backgroundSession = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.shinobicontrols.BackgroundDownload.BackgroundSession"];
    backgroundSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
});
return backgroundSession;
}

要获得更多信息,请查看此链接。你可以看到这里有各种各样的下载方法。我希望你能在这里找到你的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2014-07-29 23:38:48

你能试试这个吗?

代码语言:javascript
复制
config.discretionary = NO;

根据医生的说法:

确定是否可以根据系统的决定来调度后台任务,以获得最佳性能。

警告:只有在应用程序处于前台时,您才能这样做。

编号/doc/uid/CH1 40013440-CH1-SW31

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21871017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档