Hallo Experten,
Ich habe getestet, was mit meiner App passiert, wenn das iPhone ausgeschaltet ist , während die App aktiv ist. Zu diesem Zweck habe ich die Callback-Methoden des Lebenszyklus der App in der xcode-Debugger-Konsole protokolliert.
Das Ergebnis war: Wenn ich den Ein- / Ausschalter des Gerätes einige Zeit drücke, wird applicationWillResignActive
aufgerufen. Das iPhone zeigt eine Option an, um das Gerät auf dem Bildschirm auszuschalten. Wenn ich ackknowlege, um auszuschalten, schaltet sich das iPhone ab. Apperently werden jedoch keine Callback-Methoden wie applicationDidEnterBackground
oder applicationWillTerminate
genannt. Als Ergebnis würden alle Daten verloren gehen, wenn ich sie nicht in applicationWillResignActive
speichern würde. Obwohl iOS App Programming Guide sagt, man sollte die Daten einer App in applicationDidEnterBackground
und applicationWillTerminate
speichern.
Was denken Sie, ist eine der beiden Methoden immer noch aufgerufen und wird nur nicht mehr in der Konsole gedruckt?
Mit freundlichen Grüßen
Ich habe einige weitere Tests gemacht:
Ich habe die aufgerufenen Lifecycle-Methoden in einer Datenbank gespeichert und das iPhone ausgeschaltet, während die Anwendung ausgeführt wurde. Tatsächlich wird nur applicationWillResignActive
aufgerufen.
Aber nach dem Herunterfahren befindet sich meine Anwendung in dem Zustand "nicht ausgeführt", da das Starten der Anwendung Aufrufe von application:didFinsihLaunchingWithOptions:
und applicationDidBecomeActive
initiiert. Die Anwendungsdaten gehen also verloren, wenn ich sie nicht in applicationWillResignActive
speichere.
Wenn die Batterie leer ist während eine Anwendung läuft applicationDidEnterBackground
und applicationWillTerminate
heißen (kein Aufruf von applicationWillResignActive
!).
Ich denke, dass dein Test wahrscheinlich richtig ist. Die App ist nicht mehr aktiv, ist aber nicht in den Hintergrund getreten - so ähnlich wie wenn ich anrufe - also finde ich die Benachrichtigungen sinnvoll.
Was sollten Sie dagegen tun? Mein Vorschlag wäre nichts. Es scheint mir, dass dieses Ereignis so selten passiert, dass es sich nicht lohnt, sich darüber Gedanken zu machen. Wenn Sie Gürtel und geschweifte Klammern verwenden möchten, sollte der Speicherstatus in 'applicationWillResignActive' funktionieren, solange es nicht viel zu speichern gibt.
Ich habe das getestet. Dies ist die Reihenfolge, in der die Methoden aufgerufen werden.
Wenn Sie rutschen, ruft das Gerät folgende zwei Methoden in Ihrer App in der folgenden Reihenfolge auf
applicationDidEnterBackground
AnwendungWillTerminate
Das Gerät wird ausgeschaltet.
Ich gehe davon aus, dass das passiert, wenn die Batterie leer ist.
Dies wurde auf 3Gs mit iOS 5.0 getestet
Hoffe, das hilft.
Tags und Links iphone ios4 multitasking