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

时间:2011-01-10 02:57:49

标签: 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是空白的(无所事事?),这些代码的用法是什么?

非常感谢您的解释。

2 个答案:

答案 0 :(得分:4)

这些电话的目的是让您的应用进入后台而不会像往常一样被暂停。他们要求系统为您的应用程序授予一些额外的生存时间,即使它已被落后。

你想在后台做的事情是 beginBackgroundTask...endBackgroundTask:之间的谎言。重要的是,通过beginBackgroundTask...宣布开始执行漫长的任务后,您必须随后致电endBackgroundTask:让系统知道您已完成,现在可以暂停您。无论代码采用何种路径,您都必须始终平衡这些调用。一定要涵盖所有情况!

到期处理程序你要在后台做的事情;正如FX正确地说的那样,它是一个错误处理程序。如果您超出了您的背景时间限制(标称为十分钟),它将在紧急情况下被召唤。如果它被调用,这意味着系统将立即暂停 ,你无法阻止它。

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

答案 1 :(得分:2)

将到期处理程序视为任何错误处理程序。系统仅允许后台应用程序使用有限的CPU时间,因此如果达到此限制,将终止后台操作,并调用您的处理程序。用它来清理应用程序的内部状态。