2011-01-10 76 views
2

真搞不清楚在iOS的多任务处理API,如beginBackgroundTaskWithExpirationHandler等如何在iOS应用程序中使用多任务处理?

对于录制视频时,当按下按钮开始记录的情况下,我们把

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

录制结束

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

等谁可以解释这些是什么意思。 正如你所看到的,当开始录制时,beginBackgroundTaskWithExpirationHandler块是空白的(没什么可做的?),这些代码的用法是什么?

非常感谢解释。

回答

2

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

4

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

你想在后台做的事情是beginBackgroundTask...endBackgroundTask:之间的任何谎言。重要的是,在宣布开始了您的冗长任务并开始beginBackgroundTask...之后,您必须随后拨打endBackgroundTask:让系统知道您已完成,现在可以暂停您的工作。无论您的代码需要什么路线,您都必须平衡这些通话。一定要涵盖所有情况!

到期处理程序是而不是您想在后台执行的操作;正如FX所说的那样,它是一个错误处理程序。如果您已经超过了您的背景时间限制(名义上为十分钟),它将会在紧急情况下拨打。如果它被调用,这意味着系统将立即暂停并且您无法停止它。

你不应该有一个空的到期处理程序!原因是如果你打到你的时限和你的到期处理程序实际上是打电话的话,如果不叫endBackgroundTask:,系统不但会强制暂停你的应用程序,它会你的应用程序!因此,您的到期处理程序必须始终执行得非常快,并且必须最低限度地包含致电endBackgroundTask:

相关问题