2011-01-10 12 views
2

wirklich verwirrt über Multitasking-API in iOS, wie beginBackgroundTaskWithExpirationHandler usw.Wie Multitasking für iOS-Anwendung verwenden?

Zum Beispiel der Videoaufzeichnung, wenn drücken, um die Aufnahme zu starten, wir

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

setzen, wenn Enden

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

Wer kann also erklären, was das bedeutet. Wie Sie sehen können, ist der Block beginBackgroundTaskWithExpirationHandler beim Starten der Aufzeichnung leer (nichts zu tun?), Und was ist die Verwendung dieser Codes?

Vielen Dank für die Erklärung.

Antwort

2

Stellen Sie sich den Verfallshandler als einen Fehlerbehandler vor. Das System lässt nur zu, dass die Hintergrundanwendung eine begrenzte Menge an CPU-Zeit verwendet. Wenn Sie dieses Limit erreichen, wird die Hintergrundoperation beendet und Ihr Handler wird aufgerufen. Verwenden Sie es, um den internen Zustand Ihrer Anwendung zu bereinigen.

4

Der Zweck dieser Anrufe besteht darin, Ihre App in den Hintergrund zu stellen, ohne dass sie so ausgesetzt wird, wie es normalerweise wäre. Sie fordern, dass das System Ihrer App zusätzliche Zeit zum Leben gibt, auch wenn es im Hintergrund läuft.

Das, was Sie im Hintergrund tun mögen, ist alles, was zwischenbeginBackgroundTask... und endBackgroundTask: liegt. Wichtig ist, dass Sie nach dem Start Ihrer langwierigen Aufgabe mit beginBackgroundTask... anschließend endBackgroundTask: anrufen müssen, damit das System weiß, dass Sie fertig sind und es nun in Ordnung ist, Sie auszusetzen. Sie müssen diese Anrufe immer ausgleichen, unabhängig davon, welche Route Ihr Code einschlägt. Stellen Sie sicher, dass Sie alle Situationen abdecken!

Der Verfallshandler ist nicht die Sache, die Sie im Hintergrund tun möchten; es ist, wie FX zu Recht sagt, ein Fehlerbehandler. Es wird in einem Notfall aufgerufen, in dem Sie Ihr Zeitlimit überschritten haben (nominell zehn Minuten). Wenn es angerufen wird, bedeutet dies, dass das System Sie gerade aussetzen wird und Sie können es nicht stoppen.

Sie sollten niemals einen leeren Expirationshandler haben! Der Grund ist, dass, wenn Sie Ihr Zeitlimit treffen und Ihr Exspiration Handler tatsächlich aufgerufen wird, wenn es endBackgroundTask: nicht aufruft, wird das System nicht nur zwangsweise Ihre App aussetzen, wird es kill Ihre App! Ihr Exspiration-Handler muss daher immer sehr schnell ausgeführt werden und muss mindestens einen Aufruf an endBackgroundTask: enthalten.