ios - 如何在iOS应用程序中使用多任务处理?

标签 ios multitasking recording

对iOS中的多任务API感到非常困惑,例如beginBackgroundTaskWithExpirationHandler等。

例如录制视频,当按下按钮开始录制时,我们输入

 if ([[UIDevice currentDevice] isMultitaskingSupported]) {
        [self setBackgroundRecordingID:[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{}]];
    }

录音结束时

if ([[UIDevice currentDevice] isMultitaskingSupported]) {
        [[UIApplication sharedApplication] endBackgroundTask:[self backgroundRecordingID]];
    }

谁能解释一下这些是什么意思。 可以看到,开始录制时,beginBackgroundTaskWithExpirationHandler block 是空白的(什么都不做?),这些代码有什么用?

非常感谢您的解释。

最佳答案

这些调用的目的是让您的应用程序进入后台,而不会像通常那样被挂起。他们请求系统授予您的应用一些额外的生存时间,即使它已进入后台。

您想要在后台执行的操作是 beginBackgroundTask...endBackgroundTask: 之间的任何操作。重要的是,在使用 beginBackgroundTask... 宣布冗长任务开始后,您必须随后调用 endBackgroundTask: 让系统知道您已完成,并且已完成现在可以让你停职了。无论您的代码采用什么路线,您都必须始终平衡这些调用。请务必涵盖所有情况!

过期处理程序不是您想要在后台执行的操作;正如 FX 所说,它是一个错误处理程序。当您超出后台时间限制(通常为十分钟)的严重紧急情况下,它将被调用。如果它被调用,这意味着系统将立即暂停您,并且您无法阻止它。

你永远不应该有一个空的过期处理程序!原因是,如果你达到了时间限制并且你的过期处理程序实际上被调用,并且它没有调用endBackgroundTask:,系统不仅会强行暂停您的应用,还会杀死您的应用!因此,您的过期处理程序必须始终非常快速地执行,并且必须至少包含对 endBackgroundTask: 的调用。

关于ios - 如何在iOS应用程序中使用多任务处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4643334/

相关文章:

ios - UICollectionViewCell : Reused Cell with UIImageView item not refreshed after image and size changes

ios - WKWebView 不支持 iOS 中的部分网页

ios - 何时在应用程序 :performFetchWithCompletionHandler: when Background Fetch is async? 中调用 completionHandler

ios - 发布流时出现内部错误

ios - 在给出一般链接的情况下获得指向 youtube 视频的直接链接

iphone - iOS 4 中的多任务感知应用程序和自定义 URL 方案

python - 继承threading.Thread类不起作用

android - 抱歉,此视频不适用于流式传输到android中的此设备

ios - iOS相机以初始变焦录制视频时,第一秒钟会出现黑框

java - 声音数据格式