2012-05-07 8 views
7

In meiner Anwendung, wenn Benutzer auf Home-Taste drückt, speichere ich die Daten in NSUserDefaults. Die Anwendung wird im Hintergrund ausgeführt. Wenn der Nutzer die App neu startet, verwende ich die Methode applicationWillEnterForeground, um die gespeicherten Daten anzuzeigen.Unterscheiden zwischen applicationDidEnterBackground und applicationWillTermimate

Wenn der Benutzer jedoch zweimal auf die Home-Taste klickt und die Anwendung durch Auswahl des Minuszeichens in der App beendet, muss ich verschiedene Daten in denselben Benutzereinstellungen speichern. Aber wenn ich die Anwendung beende, wird manchmal applicationWillTerminate aufgerufen und manchmal nicht.

Also, wie kann ich unterscheiden, dass die Anwendung nur minimiert oder es ist beendet?

+0

Sie können applicationDidEnterBackground verwenden, sobald Home-Taste gedrückt wird, wird diese Methode immer aufgerufen. – rishi

+0

@rishi Es scheint, dass die eigentliche Frage in der Post ist, warum 'applicationWillTerminate' manchmal nicht aufgerufen wird, wenn die App beendet wird ... – Hailei

+0

Ja, aber wie kann ich wissen, dass die Anwendung nur minimiert oder beendet wird? Ich möchte verschiedene Daten für diese zwei verschiedenen Bedingungen gespeichert werden. –

Antwort

7

Wenn ein Benutzer nur einmal tippt und die Anwendung zu diesem Zeitpunkt im Hintergrund angezeigt wird, wird immer applicationDidEnterBackground aufgerufen. In dieser Methode können Sie Ihren NSUserDefaults-Wert vorübergehend aktualisieren/speichern.

Wenn die Anwendung erneut in den Vordergrund kommt und nicht mit Doppeltippen beendet wird, ruft applicationDidBecomeActive auf, in dem Sie den NSUserDefaults-Wert erneut aktualisieren/entfernen können. Wenn der Benutzer die Anwendung durch zweimaliges Antippen beendet, wird der gespeicherte Wert mit NSUserDefaults beibehalten.

0

Anwendungen, die Hintergrundausführung unterstützt, wird diese Methode aufgerufen Regel nicht, wenn der Benutzer die Anwendung beendet, da die Anwendung einfach in den Hintergrund bewegt sich in diesem Fall

Wenn es Daten gibt, die Sie, als Sie speichern müssen sollte es tun, wenn die App in den Hintergrund tritt.

0

applicationWillTerminate wird nur aufgerufen, wenn der Prozess der Anwendungen tatsächlich beendet wird. Das heißt, der Benutzer tötet ihn mit der roten Minus-Schaltfläche in der Task-Umschalter oder das System selbst tötet es im Hintergrund (zum Beispiel bei einem niedrigen Speicherzustand).

Für Ihre Bedürfnisse wird applicationDidEnterBackground bevorzugt; Es wird immer dann aufgerufen, wenn der Benutzer die Anwendung minimiert, indem er die Home-Taste drückt oder zu einer anderen Anwendung wechselt.

5

Den Unterschied zwischen den UIApplicationDelegate Methoden finden Sie unter UIApplicationDelegate Protocol Reference. applicationDidEnterBackground: wird immer aufgerufen, wenn die Home-Taste gedrückt wird. Aber es scheint, dass applicationWillTerminate: nicht garantiert ist, aufgerufen zu werden.

Wenn Ihre App nicht im Vordergrund ausgeführt wird, kann sie sich entweder im Hintergrundmodus oder im gesperrten Modus befinden. Weitere Informationen finden Sie im Abschnitt "Der App-Startzyklus" unter iOS App Programming Guide - App States and Multitasking.

Wenn die App im Hintergrund läuft und Ereignisse überwacht, wird applicationWillTerminate: aufgerufen, wenn sie beendet wird. Wenn die App gesperrt ist, wird sie nicht ausgeführt. Siehe die Beschreibung in „App Termination“ Abschnitt:

Auch wenn Sie Ihre App entwickeln mit iOS SDK 4 und später müssen Sie noch für Ihre Anwendung bereit sein, ohne Benachrichtigung getötet werden. Der Benutzer kann Apps mithilfe der Multitasking-Benutzeroberfläche explizit beenden. Wenn Speicher eingeschränkt wird, entfernt das System möglicherweise Apps aus dem Speicher, um mehr Platz zu schaffen. Ausgesetzte Apps werden nicht über die Beendigung benachrichtigt, aber wenn Ihre App derzeit im Hintergrund ausgeführt wird (und nicht gesperrt ist), ruft das System die Methode applicationWillTerminate: Ihres App-Delegaten auf. Ihre App kann von dieser Methode keine zusätzliche Hintergrundausführungszeit anfordern.

1

applicationDidEnterBackground - Jedes Mal, wenn Benutzer drücken Hause Taste und Anwendung im Hintergrund gehen wird es applicationDidEnterBackground Verfahren zu diesem Zeitpunkt nennen. Es wird immer dann aufgerufen, wenn der Benutzer die Anwendung minimiert, indem er die Home-Taste drückt oder zu einer anderen Anwendung wechselt.

applicationWillTerminate - Es wird nur aufgerufen, wenn der Prozess der Anwendungen tatsächlich beendet wird. Das heißt, der Benutzer tötet ihn mit dem roten Minus-Schließen-Knopf in dem Aufgabenumschalter, oder das System selbst tötet ihn, während er sich im Hintergrund befindet (beispielsweise in einem Zustand mit wenig Speicher). Ihre App kann keine zusätzliche Hintergrundausführungszeit von dieser Methode anfordern.

1

applicationDidEnterBackground - Diese Methode wird aufgerufen, wenn der Benutzer die Anwendung durch Drücken der Home-Taste in den Hintergrund versetzt.

applicationWillTerminate - Diese Methode wird aufgerufen, wenn der Benutzer die App im Hintergrundmodus durch Drücken der roten Minus-Taste beendet.

Verwandte Themen