AFNetworking后台下载会在一段时间后自动停止,我需要恢复它

时间:2015-07-02 05:43:55

标签: ios objective-c afnetworking

我正在使用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];
    }];

如果有任何人有任何解决方案,请告诉我,提前致谢。

2 个答案:

答案 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
    }];
}

希望这会有所帮助!