对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/