Was passiert, wenn die App abstürzt?

8

Ich entwickle eine Android-App und wie erwartet gibt es Situationen, in denen mein Code abstürzt (Bugs, Nullzeiger usw.).

Wenn die App abstürzt, startet sie sich selbst neu, obwohl ich keinen Code dafür geschrieben habe (ich stelle mir vor, es ist das Standardverhalten ?!), aber das Problem ist, dass die App sich in einem falschen Zustand öffnet.

Das passiert normalerweise, wenn die App startet:

  • Zunächst wird die App mit einem Begrüßungsbildschirm geöffnet. In diesem Bildschirm wird versucht, den Benutzer mithilfe von persistenten Tokens in freigegebenen Einstellungen zu authentifizieren und einige Standardwerte vom Server zu laden und in einigen Diensten beizubehalten.
  • Abhängig vom Login-Erfolg, geht es entweder zum Hauptbildschirm oder zum Login-Bildschirm.

Wenn die App normal startet, funktioniert alles ordnungsgemäß und die Initialisierungssequenz wird wie erwartet ausgeführt, aber wenn sie als Ergebnis eines Absturzes neu gestartet wird, die Werte, die im Splash-Screen-Fragment aufgefüllt worden wären (z. B. Anmelden der Benutzer oder das Laden der Standardwerte vom Server) sind alle ungültig, dh sie werden nie ausgeführt.

Das führt mich zu der Annahme, dass die Abfolge von Ereignissen beim Neustart der App völlig falsch ist, dh anstatt die App mit der richtigen Aktivität neu zu starten, die im Manifest als Startprogramm angegeben ist, scheint sie die Dinge falsch neu zu starten und von der falsche Aktivität.

Hier ist also die Frage: Was bestimmt, dass meine App sich neu starten sollte, wenn ein Absturz passiert und was bestimmt, wie es gestartet werden sollte? Gibt es irgendwelche Ereignisse, die ich bei einem Absturz der App feststellen kann, damit ich die Initialisierungssequenz überschreiben kann? Gibt es eine Möglichkeit, die App immer von der Launcher-Aktivität starten zu lassen?

Vielen Dank im Voraus,

    
kha 04.11.2014, 18:49
quelle

1 Antwort

2

Wenn eine Aktivität aufgrund eines Absturzes neu gestartet wird, verwirft das System die Aktivität, wenn der Prozess, der die Vordergrundaktivität ausführt, wegfällt, wenn es keinen gültigen gespeicherten Status dafür hat (normalerweise bedeutet es, dass es pausiert ist und dem System das Ergebnis von onSaveInstanceState von vor der Pause gegeben). Sobald das System entschieden hat, ob diese Aktivität weggeworfen werden soll oder nicht, wird die Aktivität wieder aufgenommen, die sich jetzt an der Spitze des Stapels befindet. Wenn dies eine Ihrer Aktivitäten ist, entweder weil Sie einen anderen hinter dem einen haben, der abgestürzt ist, oder der, der abgestürzt ist, war es irgendwie der pausierte Zustand, dann startet das System Ihren Prozess erneut, um diese Top-Aktivität zu zeigen. Sie können versuchen, clearTaskOnLaunch="true" in der Android-Aktivität Hauptaktivitätsdeklaration (Launcher-Aktivität) und android:finishOnTaskLaunch ="true" für andere Aktivitäten außer Hauptgruppe festzulegen und zu überprüfen, ob dadurch verhindert wird, dass die App nach einem Absturz in einem anderen Status neu gestartet wird. Ein anderer Weg wäre, zu überprüfen, wo Ihre Aktivität neu gestartet wird, und dann am Anfangspunkt zu überprüfen, ob diese Aktivität alle erforderlichen Daten enthält oder nicht. Wenn nicht alle erforderlichen Daten vorhanden sind, leiten Sie sie zur Launcher-Aktivität um. Hoffe, das hilft.

    
Wildroid 04.11.2014 19:37
quelle

Tags und Links