我需要使用 AFNetworking 下载文件 > 500 Mo。有时,下载它们的时间超过 10 分钟,如果应用程序在后台,则下载无法完成。
所以我想尝试部分下载。我发现了很多链接,这似乎可以通过 AFHTTPRequestOperation 上的 pause() 和 resume() 方法实现。
实际上,我做到了:
[self.downloadOperation setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{
// Clean up anything that needs to be handled if the request times out
[self.downloadOperation pauseDownload];
}];
DownloadOperation 是 AFHTTPRequestOperation(单例)的子类。
在 AppDelegate 中:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
// resume will only resume if it's paused...
[[DownloadHTTPRequestOperation sharedOperation] resumeDownload];
}
服务器可以在标头中获取新范围...
我的问题:
1)这不是好方法吗?2) 简历是否需要更改 outputStream (append:NO => append:YES) ?或者它是由 AFNetworking 管理的吗?(没找到)
self.outputStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:YES];
像这样的东西(在 DownloadHTTPRequestOperation 中):
- (void)pauseDownload
{
NSLog(@"pause download");
[self pause];
}
- (void)resumeDownload
{
NSLog(@"resume download");
self.outputStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:YES];
[self resume];
}
谢谢你的帮助。