重新启动应用程序后如何恢复下载任务(NSURLSessionDownloadTask)

Posted

技术标签:

【中文标题】重新启动应用程序后如何恢复下载任务(NSURLSessionDownloadTask)【英文标题】:How to resume download tasks (NSURLSessionDownloadTask) after restart app 【发布时间】:2013-11-05 13:42:58 【问题描述】:

我添加“下载任务”并终止应用进程。

运行app后,获取[manager downloadTasks];并恢复所有。 但是文件没有加载到文档目录中。

我使用 AFNetworking 2.0 (https://github.com/AFNetworking/AFNetworking)

完整代码 - https://github.com/nullproduction/FileDownloader

//
//  DownloadsViewController.m
//

#import "DownloadsViewController.h"

@implementation DownloadsViewController

- (id)init

    [self printDocumentsPath];

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"downloads"];

    manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    NSArray *downloadTasks = [manager downloadTasks];

    if (downloadTasks.count)
    
        NSLog(@"downloadTasks: %@", downloadTasks);
        // resume all
        for (NSURLSessionDownloadTask *downloadTask in downloadTasks)
        
            [downloadTask resume];
        
    

    return [super init];


- (void)addDownloadTask:(id)sender

    NSURL *URL = [NSURL URLWithString:@"http://www.rarlab.com/rar/wrar500.exe"];

    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request
    progress:nil
    destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) 
       NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];
        return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];
     completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) 
         NSLog(@"File downloaded to: %@", filePath);
    ];
    [downloadTask resume];

    NSLog(@"%d", downloadTask.taskIdentifier);


- (void)viewDidLoad

    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"addDownloadTask" style:UIBarButtonItemStyleBordered target:self action:@selector(addDownloadTask:)];


- (void)printDocumentsPath

    NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"%@", documentsDirectoryPath);




@end

【问题讨论】:

【参考方案1】:

我注意到,下载完成后在finder中查看文档目录时文件不存在。但是,当从应用程序访问文件时,它会找到它。一段时间后(一分钟内),该文件最终出现在文档目录中。这可能是仅与模拟器有关的问题..

【讨论】:

以上是关于重新启动应用程序后如何恢复下载任务(NSURLSessionDownloadTask)的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSession downloadTaskWithResumeData 在重新启动应用程序后给出错误

如何取消我恢复的 NSURLSessionDownloadTask 以恢复我上次启动应用程序时创建的下载(后台)任务

重新启动后恢复视图状态

如何使用 PowerShell 在系统重新启动后延迟 10 分钟在 Windows 任务计划程序中安排任务?

Flink 任务失败重启与恢复策略

Flink 任务失败重启与恢复策略