2011-01-10 111 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:

相關問題