gpt4 book ai didi

ios - 在后台 IOS 中实现长时间运行的任务

转载 作者:技术小花猫 更新时间:2023-10-29 10:59:00 24 4
gpt4 key购买 nike

我一直在开发一个应用程序,用户可以在其中使用 AVFoundation 录制视频并发送到服务器,视频的最大大小可达 15M,具体取决于它可以从中获取的互联网速度和类型将视频传输到服务器大约需要 1 到 5 分钟。我正在后台线程中将录制的视频传输到服务器,以便用户可以在将视频上传到服务器的同时继续应用程序上的其他内容。

在阅读 implementing long running tasks in backround 的 Apple 文档时,我看到只有少数几种应用程序允许在后台执行。
例如

audio—The app plays audible content to the user while in the background. (This content includes streaming audio or video content using AirPlay.)

它是否也使我的应用程序有资格在后台运行任务?或者我需要在主线程上传输视频?

最佳答案

NSOperationQueue 是执行多线程任务以避免阻塞主线程的推荐方式。后台线程用于您希望在应用程序处于非事件状态时执行的任务,例如 GPS 指示或音频流。

如果您的应用程序在前台运行,则根本不需要后台线程。

对于简单的任务,您可以使用 block 将操作添加到队列:

NSOperationQueue* operationQueue = [[NSOperationQueue alloc] init];
[operationQueue addOperationWithBlock:^{
// Perform long-running tasks without blocking main thread
}];

关于 NSOperationQueue 的更多信息和 how to use it .

上传过程将在后台继续,但您的应用程序将有资格暂停,因此上传可能会取消。为避免这种情况,您可以将以下代码添加到应用程序委托(delegate)中,以在应用程序准备好暂停时通知操作系统:

- (void)applicationWillResignActive:(UIApplication *)application {
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{

// Wait until the pending operations finish
[operationQueue waitUntilAllOperationsAreFinished];

[application endBackgroundTask: bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}

关于ios - 在后台 IOS 中实现长时间运行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15268702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com