我正在使用AFNetwork(它基于NAFDownloadRequestOperation)和我从亚马逊桶逐个下载多个zip文件的任务。 当应用程序处于前台时,每件事情都运行良好,但当应用程序进入后台模式时,下载时间仅运行一段时间,它将自动停止。我读了一些关于它的博客,因为我在下载之前调用了以下方法。
[self.operationUpdate setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{
NSLog(@"downloading will stop");
}];
我也在AppDelegate中使用以下代码,但我不明白如何恢复以前的下载。
__block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) {
[application endBackgroundTask:backgroundTaskIdentifier];
NSLog(@"applicationWillResignActive");
[__SERVER_INSTANCE cancellAllDownloading];
// [[YourRestClient sharedClient] cancelAllHTTPOperations];
}];
如果有任何人有任何解决方案,请告诉我,提前致谢。
答案 0 :(得分:2)
您应该使用AFDownloadRequestOperation
您的请求看起来像
c => {((object[])(c))[i] = ConvertFromObjectToDate(((object[])(c))[i]);}
重新启动应用程序并生成具有相同网址的请求后,它将继续下载。 " shouldResume:YES"的工作原理。
因此,在您的后台任务中,您可以重新创建完成下载的请求
AFDownloadRequestOperation *operation = [[AFDownloadRequestOperation alloc] initWithRequest:request targetPath:path shouldResume:YES];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[operations addObject:operation];
希望这有帮助
答案 1 :(得分:0)
后台下载因某些时候停止,因为您可能没有在xcode中启用功能中的后台提取。
请参阅随附的屏幕截图
和Appdelegate你已经写了这段代码,
-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return true;
}
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
completionHandler(UIBackgroundFetchResultNewData);
}
OR
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
NSTimeInterval ti = [[UIApplication sharedApplication]backgroundTimeRemaining];
NSLog(@"backgroundTimeRemaining: %f", ti);
// just for debug
}];
}
希望这会有所帮助!