Unterscheide zwischen dem Absturz und dem Absturz einer iPhone App

8

Hallo, ich plane ein einfaches iPhone-Spiel zu entwickeln. Ich möchte in der Lage sein, zwischen einem echten Absturz und dem Benutzer zu unterscheiden, der die App beendet (durch zweimaliges Tippen auf den Startbildschirm und langes Klicken, um ihn zu beenden).

Kann jemand bitte etwas Licht auf das werfen, was genau passiert, wenn der Benutzer die App durch die Multitasking-Leiste killt.

    
Gapton 11.08.2011, 07:32
quelle

3 Antworten

15

Wenn sich Ihre App im Hintergrund befindet und ausgesetzt wird, wenn der Nutzer sie beendet, erhält sie keine Benachrichtigung. Dies ist in den meisten Fällen der Fall.

Wenn Ihre App derzeit läuft im Hintergrund läuft (es gibt nur sehr spezifische Kategorien von Apps, die das tun können), dann erhält sie applicationWillTerminate .

Tatsächlich ist Apple sehr klar darüber, dass Sie alle relevanten Daten speichern sollten, bevor Sie in den Hintergrund treten. Sehen Sie sich dies (Kapitel" Reagieren auf die Beendigung der Anwendung "):

  

Auch wenn Sie Ihre Anwendung mit iOS SDK 4 und höher entwickeln, müssen Sie dennoch darauf vorbereitet sein, dass Ihre Anwendung ohne Benachrichtigung beendet wird. Der Benutzer kann Anwendungen mithilfe der Multitasking-Benutzeroberfläche explizit beenden. Wenn der Speicher eingeschränkt wird, entfernt das System möglicherweise Anwendungen aus dem Speicher, um mehr Platz zu schaffen. Wenn Ihre Anwendung derzeit gesperrt ist, wird Ihre Anwendung vom System beendet und ohne weitere Benachrichtigung aus dem Speicher entfernt . Wenn Ihre Anwendung jedoch gerade im Hintergrund läuft (dh nicht ausgesetzt), ruft das System die applicationWillTerminate: -Methode Ihres Anwendungsdelegaten auf. Ihre Anwendung kann von dieser Methode keine zusätzliche Hintergrundausführungszeit anfordern.

BEARBEITEN:

über das "Saying Sorry" -Ding ...

Das können Sie sicherlich bei der nächsten Einführung tun. Speichere einfach einen Schlüssel in NSUserDefaults und entferne ihn, wenn die App in den Hintergrund tritt (ich hoffe, dir kommt das alles bekannt vor, ansonsten schau dir das UIApplicationDelegate-Protokoll an).

Wenn die App startet, überprüfen Sie den Schlüssel; Wenn es dort ist, wurde die App nicht vom Benutzer geschlossen. Wenn die App nicht vorhanden ist, hat der Benutzer die App zumindest in den Hintergrund verschoben und es kam zu keiner plötzlichen Beendigung ...

    
sergio 11.08.2011, 07:46
quelle
7

Für iOS6 und höher gibt es eine Möglichkeit, dies zu tun. Ein Nebeneffekt von State Restoration ist, dass es gelöscht wird der Status, wenn während der Wiederherstellung ein Absturz auftritt oder ein Benutzer die App manuell beendet. Sie können dies zu Ihrem Vorteil verwenden, um einen Benutzer zu erkennen, der die App manuell beendet.

Aus dem Dokumentation :

  

Beachten Sie, dass das System den Status einer App automatisch löscht, wenn der Benutzer die App beendet. Löschen der konservierten Statusinformationen, wenn die App getötet wird, ist eine Sicherheitsmaßnahme. (Das System löscht auch den Status "Konserviert", wenn die App zum Zeitpunkt des Starts als eine ähnliche Sicherheitsmaßnahme abstürzt.) Wenn Sie die Fähigkeit Ihrer App testen möchten, ihren Zustand wiederherzustellen, sollten Sie die App während des Debuggens nicht mit der Multitasking-Leiste beenden. Verwenden Sie stattdessen Xcode, um die App zu beenden oder die Anwendung programmgesteuert zu beenden, indem Sie einen temporären Befehl oder eine temporäre Geste zum Aufrufen von exit on demand installieren.

Der folgende Code geht davon aus, dass Sie bereits eine BOOL für die Aufdeckungserkennung namens _didCrashInLastSession haben. Es gibt verschiedene Ansätze, um diesen Wert zu erhalten, z. B. diese Bibliothek von Drittanbietern . Rufen Sie in Ihrem Code die Methode [self getLaunchType] auf, um zu sehen, mit welcher Art von Start Sie es zu tun haben und handeln Sie entsprechend. Setzen Sie Folgendes in Ihr AppDelegate.m:

%Vor%

Update : Mindestens ein 3rd Party SDK bricht diese Technik: Urban Airship.

    
Skotch 17.07.2013 22:00
quelle
2

Sie können es auch über Ihr Gerät tun. Verbinden Sie Ihr Gerät mit Ihrem Gerät. Führe xcode aus und gehe zum Organizer. Dort wählen Sie Ihre Geräte- und Geräteprotokolle aus. Dort können Sie auch Absturzprotokolle Ihrer App oder Ihres Spiels sehen.

    
manishnath 11.08.2011 08:06
quelle