2013-07-24 10 views
16

Was ist die Delegate-Methode zum Erkennen, wenn die Anwendung geschlossen wurde.iOS Erkennen, wenn App aus Prozess entfernt wurde

Ich meine, wenn der Benutzer auf diese Schaltfläche tippen:

enter image description here

Ich kenne Methode unter:

- (void)applicationDidEnterBackground:(UIApplication *)application; 

- (void)applicationWillEnterForeground:(UIApplication *)application; 

Aber sie arbeiten nicht, wie ich in meinem Fall erwartet. Zum Beispiel habe ich meine App verwendet und ich habe zu einem Bildschirm navigiert. Wenn ich den Bildschirm sperre und zurück zur App gehe, ruft die App applicationWillEnterForeground auf, aber ich brauche das nicht, weil ich immer noch in dieser Ansicht bin (zum Beispiel Test Screen View) und ich brauche keine Änderungen zu überprüfen. Aber wenn meine App geschlossen ist, beginne ich von der Start-App aus zu navigieren, zum Beispiel auf dem Home-Bildschirm. Also, wenn meine App geschlossen war und ich auf dem Startbildschirm bin, muss ich überprüfen, ob ich in der Vergangenheit einige Aktionen hatte (zB wenn ich den Test Screen View bestanden habe) und diesen View Controller präsentiere (NUR IM FALL, WENN ICH APP NICHT GESCHLOSSEN HABE GERADE GESPERRT ODER ENTER HINTERGRUND).

Danke für Hilfe.

Antwort

18

Sie können dies nicht erkennen.Von der iOS App Programming Guide ("App Termination" Überschrift):

Wichtig: Die applicationWillTerminate: Methode nicht, wenn Ihre App zur Zeit aufgerufen wird, wird ausgesetzt.

Auch wenn Sie Ihre App mit iOS SDK 4 und höher entwickeln, müssen Sie immernoch darauf vorbereitet sein, dass Ihre App ohne Benachrichtigung beendet wird. Der Benutzer kann Apps explizit mithilfe der Multitasking-Benutzeroberfläche beenden. Wenn der Speicher eingeschränkt wird, entfernt das System unter Umständen auch Apps aus dem Speicher , um mehr Platz zu schaffen. Ausgesetzte Apps werden nicht über die Beendigung benachrichtigt. Wenn Ihre App jedoch im Hintergrund ausgeführt wird ( ) und nicht unterbrochen ist, ruft das System die Methode applicationWillTerminate: Ihres App-Delegaten auf. Ihre App kann nicht zusätzliche Hintergrund Ausführungszeit von dieser Methode anfordern.

+0

Danke für die Post. Das hilft! – kakyo

+1

Veralteter Link :) [Vielleicht wird dieser der Trick!] (Https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/ doc/uid/TP40007072-CH2-SW7) – Jissay

9

Sie können nicht. Wenn Ihre App auf diese Weise getötet wird, wird nichts gesagt. Die App wird vom Betriebssystem ohne jegliche Warnung getötet.

Wenn Ihre App in den Hintergrund tritt, haben Sie keine Möglichkeit zu wissen, ob sie frisch gestartet wird oder einfach in den Vordergrund zurückkehrt. Daher müssen Sie die Dinge richtig handhaben, wenn die App in den Hintergrund tritt.

Wenn die App erneut gestartet wird, stellen Sie den gewünschten Status wieder her.

2

Auf iOS können Sie nicht überprüfen. Das heißt: Der Prozess ist SIGKILL'ed. Ein Weg, den ich kenne, hängt davon ab, dass man eine App beenden muss, indem man die Home-Taste drückt.

Daher können Sie Ihre Aktionen sammeln, wie der Benutzer die App verwendet, um sie an einen gespeicherten Ort zu binden, wenn der Benutzer die App aussetzt. Wenn der Benutzer fortfährt, setzen Sie die Liste zurück und beginnen Sie erneut, Informationen zu sammeln. Wenn der Benutzer die App jedoch aussetzt und Sie nie eine Zusammenfassung erhalten, können Sie beim nächsten Start der App die Liste lesen und von dort wiederherstellen.

HTH

2

Sie können die -applicationWillTerminate: Methode Ihrer UIApplicationDelegate Delegierten implementieren, um Beendigung Ereignisse zu reagieren. Es kann jedoch nicht garantiert werden, dass sie in allen Fällen aufgerufen werden. Sie sollten sich also nicht darauf verlassen, dass sie angerufen wird. Nach den iOS App Programming Guide:

Wenn Ihre App (entweder im Vordergrund oder im Hintergrund) bei Beendigung Zeit laufen, ruft das System Ihres applicationWillTerminate: Methode des AppDelegate, so dass Sie jede erforderliche Bereinigung durchführen können. Sie können diese Methode verwenden, um Benutzerdaten oder Informationen zum App-Status zu speichern, die Sie verwenden würden, um Ihre App bei einem späteren Start in den aktuellen Zustand zu versetzen. Ihre Methode hat ungefähr 5 Sekunden Zeit, um Aufgaben auszuführen und zurückzukehren. Wenn es nicht rechtzeitig zurückkehrt, wird die App gelöscht und aus dem Speicher entfernt.

Wichtig: Die Methode applicationWillTerminate: wird nicht aufgerufen, wenn Ihre App derzeit gesperrt ist.

+0

Ein wichtiger Vorteil hier ist, dass, wenn Sie Ihre beste Chance haben, dies zu erkennen, Sie Ihre App immer im Hintergrund am Leben erhalten müssen. Etwas, das für eine App Store-App wahrscheinlich nicht geeignet ist (aber möglicherweise für App-Store-fremde Apps, die keine Genehmigung benötigen). – Nate

Verwandte Themen