Я пытаюсь правильно обрабатывать незавершенные NSURLSessionTasks в случае, если приложение входит в фоновый режим (например, с помощью кнопки home нажмите). В настоящее время я использую подход копирования задач в процессе в фоновый режим (см. Код ниже). Однако я нахожу, что фоновые задачи ведут себя беспорядочно и не всегда заканчиваются. Может ли какое-нибудь пятно, что я могу сделать неправильно/советую по наилучшему подходу?Перемещение в фоновый режим NSURLSession с переднего плана NSURLSession - Обработка задач в процессе
- (void)appWillResignActive : (NSNotification *)notification {
UIApplication *app = [UIApplication sharedApplication];
// Register expiring background task
__block UIBackgroundTaskIdentifier bgTaskId =
[app beginBackgroundTaskWithExpirationHandler:^{
bgTaskId = UIBackgroundTaskInvalid;
}];
[self switchToBackground];
[app endBackgroundTask:bgTaskId];
}
- (void)appWillBecomeActive : (NSNotification *)notification {
[self switchToForeground];
}
- (void)switchToBackground
{
NSLog(@"Switch to background line 217 Network Manager");
if ([state isEqualToString: kdownloadManagerStateForeground]) {
[urlSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
[downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
NSURLSessionDownloadTask *downloadTask = [self.backgroundSession downloadTaskWithResumeData:resumeData];
[downloadTask resume];
}];
}
}];
state = kdownloadManagerStateBackground;
}
}
- (void)switchToForeground
{
if ([state isEqualToString: kdownloadManagerStateBackground]) {
[backgroundSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
[downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
NSURLSessionDownloadTask *downloadTask = [self.urlSession downloadTaskWithResumeData:resumeData];
[downloadTask resume];
}];
}
}];
state = kdownloadManagerStateForeground;
}
}
Вы хотите продолжить загрузку в фоновом режиме r8? –
Точно вправо - продолжить в фоновом режиме. – GuybrushThreepwood
Пожалуйста, проверьте мой ответ. –