Verhindern, dass die Aktivität so lange wie möglich zerstört wird

8

Ich habe eine App, eine einzelne Aktivitäts-App mit Fragmenten.

Der übliche Anwendungsfall für diese App ist, dass Sie es starten und das Telefon weglegen und hin und wieder, Sie gehen zurück zum Telefon und fügen Sie einige Daten ein ... Es ist eine Logging-App, Sie tun etwas und Fügen Sie Ihre Ergebnisse in die App ein ...

Ich habe das Problem, dass meine Aktivität hin und wieder zerstört wird und mit einem leeren Bündel neu erschaffen wird ... (Meistens ist das nicht der Fall, aber hin und wieder passiert das ...) . Meine App startet manchmal einen Dienst, selbst dieser Dienst wird in diesem Fall getötet ...

Das bedeutet, dass das System meine App getötet hat, oder? Wie kann ich das vermeiden?

Ich muss die Benutzerdaten und die aktuellen Top-Fragmente behalten ... Und sie werden im Bundle gespeichert und alles funktioniert, solange ihre Zustände und die Daten gespeichert werden ...

Übrigens ist meine Aktivität immer die TOP-AKTIVITÄT, nur dass der Bildschirm oft ausgeht ... Ich möchte meine Aktivität nur so lange am Leben halten, bis der Benutzer sie mit der Zurück-Taste verlässt ... Oder zu rette den Zustand zuverlässig

WICHTIGER HINWEIS

onSaveInstance funktioniert nicht immer (es ist nicht Teil des Lebenszyklus und daher nicht garantiert aufgerufen werden) ... es funktioniert nur die meiste Zeit ... Ich brauche einen Weg, um das funktioniert immer ... Wenn Android meine App tötet ...

    
prom85 04.03.2014, 09:46
quelle

2 Antworten

8

halte deine App nicht im Speicher

Sie möchten Android nicht daran hindern, Ihre App zu beenden. Sie möchten den Zustand Ihrer App wiederherstellen. Dann wird der Benutzer nie bemerken, dass die App zerstört wurde, und der Nutzer profitiert immer noch von einer App, die zerstört wurde, wenn sie nicht verwendet wurde.

Wenn du das wirklich willst, benutze einen Wakelock. Dies wird die Batterie des Anwenders entleeren, also denke ich zweimal darüber nach, bevor ich das umsetze ... Info unter Wie verhindere ich, dass ein Android-Gerät programmgesteuert in den Ruhezustand wechselt?

onSaveInstanceState erklärt

Prüfen Sie dazu, welche Informationen im Paket benötigt werden, und bewahren Sie diese Informationen mit der onSaveInstanceState(bundle:Bundle) -Methode auf, damit Sie sie in onCreate(sameBundle:Bundle) wiederverwenden können.

Weitere Informationen finden Sie in der Google-Dokumentation unter Speichern Sie Ihren Aktivitätsstatus und < a href="http://developer.android.com/training/basics/activity-lifecycle/recreating.html#RestoreState"> Stelle deinen Aktivitätsstatus wieder her .

Informationen zum Lebenszyklus von Android-Aktivitäten

Wie in @ comm85 in den Kommentaren angegeben, ist es nicht garantiert, dass die Methode onSaveInstanceState aufgerufen wird, da sie nicht Teil des Lebenszyklus ist. Umgehung hierfür ist die Verwendung des Hooks onPause lifecycle, um sicherzustellen, dass Ihre Daten gespeichert werden.

Weitere Informationen finden Sie unter Android: onSaveInstanceState wird nicht aus der Aktivität aufgerufen

    
hcpl 04.03.2014 10:03
quelle
3

Ich hatte ein ähnliches Problem, ich kam zu diesem Post bei der Suche nach einer Lösung, Sie müssen mit dem Manifest spielen, um dies zu erreichen und auch zu verstehen, was genau Aktivität ist, in Android-Ökosystem,

In Android-Aktivität ist eine Aufgabe, die eine vordefinierte Arbeit hat.

Ich habe viel in der Dokumentation gegraben, ich habe festgestellt, dass wir Aktivität auf zwei Arten konfigurieren können,

  1. Persistent
  2. nicht persistent

wenn Sie für die Aktivität im Manifest als

angeben %Vor%

und führen Sie den folgenden Anwendungsfall

aus
  1. Starten Sie die APP
  2. Drücken Sie die Zurück- oder Home-Taste
  3. Sie wählen die Aktivität im Backstack erneut aus, um sie nach vorne zu bringen

Aktivität gibt Start ein - & gt; Pause - & gt; stop - & gt; Lebenslauf, es kommt nicht in OnDestroy Methode.

falls nicht erwähnt

%Vor%

für denselben Anwendungsfall

Aktivität gibt Start ein - & gt; Pause - & gt; stop - & gt; zerstören, und wenn Sie die Aktivität aus dem Backstack auswählen

Die Aktivität ruft resume- & gt; create- & gt; start

auf

Wenn Sie beim Start einer Aktivität einen Dienst / eine Aufgabe ausführen möchten, der ausgeführt wird, wenn sich die Anwendung im Backstack befindet, müssen Sie dies in der onCreate-Methode starten und sie bei onDestroy beenden, indem Sie Ihre Aktivität im Manifest als persistent angeben.

Ich hoffe, dass meine obige Lösung anderen helfen kann, die wegen des gleichen Problems hier ankommen

    
aravind.udayashankara 04.03.2016 06:49
quelle