iOS开发 - 后台下载(BackgroundTasks)

178 阅读1分钟

Xcode配置

image.png

image.png

代码实现

// 启动后台任务
- (void)startBackgroundTask {
    if (self.isDownloading) {
        // 获取后台任务标识符
        UIApplication *application = [UIApplication sharedApplication];
        self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
            // 后台任务到期时调用
            [self endBackgroundTask];
        }];
    }
}

// 下载任务完成的回调方法
- (void)downloadTaskDidComplete {
    // 检查应用程序是否在后台运行
    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) {
        // 结束后台任务
        [self endBackgroundTask];
    }
}

// 结束后台任务
- (void)endBackgroundTask {
    if (self.backgroundTaskIdentifier != UIBackgroundTaskInvalid) {
        [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];
        self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
    }
}

参考文章

BGProcessingTask

Best practice: iOS background processing - Background App Refresh Task

Modern Backgrounds Tasks in iOS 13

iOS BackgroundTasks

BGProcessingTask not getting executed - stackoverflow

Background Fetch

Background tasks in iOS