首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景下的NSURLSessionUploadTask连续上传

背景下的NSURLSessionUploadTask连续上传
EN

Stack Overflow用户
提问于 2013-11-14 11:52:11
回答 1查看 3.6K关注 0票数 2

当我的应用程序在后台的时候,我想用NSURLSessionUploadTask上传很多文件。

通过适当配置的NSURLSession对象,用于排队的后台上载的API是:

代码语言:javascript
复制
NSURLSessionUploadTask *dataTask = [sessionObj uploadTaskWithRequest:urlRequest
                                                            fromFile:localFilePath];
[dataTask resume];

当上传完成--成功还是失败--我会在后台得到这个回调:

代码语言:javascript
复制
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

在上面的回调过程中,我用

-uploadTaskWithRequest:fromFile:

但是在上传了一些文件之后,回调就停止了,上传也停止了。

有什么东西我错过了继续上传吗?我是否需要在这个回调中添加一些额外的代码来保持上传的正常进行?

代码语言:javascript
复制
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {
    AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate];
    if (appDelegate.backgroundSessionCompletionHandler) {
        void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler;
        appDelegate.backgroundSessionCompletionHandler = nil;
        completionHandler();
    } 
}

注意到:我已经读过这个相关的question了,但是没有帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-02-10 18:27:24

关闭任务队列

我发现,在后台,您应该避免让任务队列到达0任务,直到真正“完成”为止。相反,如果始终保持队列中的任务很少,则可以获得更好的连续性。例如,当任务数减少到3个时,再添加3个任务。

Protip:对于活动任务的计数,最好是使用自己的计数,而不是笨拙的异步-[NSURLSession getTasksWithCompletionHandler:]。我将后台任务ID (作为@(taskID))添加/移除到NSSet (例如,NSSet *activeTaskIDs)中,然后使用计数。我把这个拼出来了,here

括号异步调用

如果您在didComplete...回调期间执行任何异步操作,则必须用UIApplication-beginBackgroundTaskWithExpirationHandler:-endBackgroundTask:包围它,否则,看起来您已经弹出了堆栈,iOS会杀死您。

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

https://stackoverflow.com/questions/19976938

复制
相关文章

相似问题

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