我一直在开发一个应用程序,用户可以使用该应用程序录制视频AVFoundation
并发送到服务器,视频的最大大小可达15M,具体取决于互联网速度和类型,大约需要1到5分钟才能将视频传输到服务器.我正在将录制的视频传输到后台线程中的服务器,以便用户可以在视频上传到服务器时继续应用程序上的其他内容.
在阅读Apple Docs 以在后台实现长时间运行的任务时,我发现只允许几种应用程序在后台执行.
例如
audio-该应用程序在后台播放可听内容给用户.(此内容包括使用AirPlay播放音频或视频内容.)
它是否也使我的应用程序符合在后台运行任务的资格?或者我需要在主线程上传输视频?
red*_*t84 13
NSOperationQueue
是推荐的执行多线程任务的方法,以避免阻塞主线程.后台线程用于在应用程序处于非活动状态时要执行的任务,如GPS指示或音频流.
如果您的应用程序在前台运行,则根本不需要后台线程.
对于简单任务,您可以使用块向队列添加操作:
NSOperationQueue* operationQueue = [[NSOperationQueue alloc] init];
[operationQueue addOperationWithBlock:^{
// Perform long-running tasks without blocking main thread
}];
Run Code Online (Sandbox Code Playgroud)
有关NSOperationQueue的更多信息以及如何使用它.
上传过程将在后台继续,但您的应用程序将有资格被暂停,因此上传可能会取消.为避免这种情况,您可以将以下代码添加到应用程序委托,以便在应用程序准备好挂起时通知操作系统:
- (void)applicationWillResignActive:(UIApplication *)application {
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
// Wait until the pending operations finish
[operationQueue waitUntilAllOperationsAreFinished];
[application endBackgroundTask: bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
Run Code Online (Sandbox Code Playgroud)
从您对Dwayne的回复中,您无需在后台模式下载.而你需要的是在主线程旁边的另一个线程(后台线程)中进行下载.对于GCD来说是这样的:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do you download here...
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11560 次 |
最近记录: |