0

App freezes and UI blocked when download task is running in background session

I have a background session as below

-(NSURLSession *)backgroundSession
{
    if (session==nil) {
        NSURLSessionConfiguration *configuration;

        //        configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        if ([NSURLSessionConfiguration respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) {
            configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.xxx.xxx.BackgroundSession"];
        } else
        {
            configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.xxx.xxx.BackgroundSession"];
        }
        [configuration setSessionSendsLaunchEvents:YES];
        configuration.HTTPMaximumConnectionsPerHost = 1;
        session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    }
    return session;
}

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
        if ([downloadTasks count] > 0 ) {
            NSArray *filtered = [downloadTasks filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.taskDescription MATCHES %@)", [NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID]]];
            if([filtered count]>0)
            {
                for(NSURLSessionDownloadTask *PreviousDownloadTask in filtered)
                {
                    if(PreviousDownloadTask.state != NSURLSessionTaskStateRunning && PreviousDownloadTask.state != NSURLSessionTaskStateCompleted)
                    {
                        [PreviousDownloadTask resume];
                        NSLog(@"SONGDATA_DOWNLOAD already in queue %@ task Description %@",filtered,[NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID]);
                    }
                    return ;

                }
            }

        }
    }];





    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    self.downloadTask = [[self backgroundSession] downloadTaskWithRequest:request];
    downloadTask.taskDescription=[NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID];

    [self.downloadTask resume];

But when request sends it fails and gets result

An error occurred on the xpc connection to setup the background session:

Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.nsurlsessiond" UserInfo={NSDebugDescription=connection to service named com.apple.nsurlsessiond}

for few minutes when the appfreezes and no UI action could be done.

Anand
  • 1,820
  • 2
  • 18
  • 25
Dinesh Kumar
  • 165
  • 1
  • 14

0 Answers0