Ich habe eine einfache Klasse, um ein paar Variablen zu behalten, um sie zwischen Aktivitäten in meinem Spiel zu teilen, etwa wie folgt:
%Vor%Jetzt, wenn das Spiel startet, ist die erste Aktivität MainMenu, die bestimmt, ob der Benutzer das vollständige Spiel gekauft hat, und setzt die Variable entsprechend. Zum Beispiel, wenn der Benutzer das Spiel gekauft hat, würde es
tun %Vor%So weit, so gut. Von hier aus klickt der Nutzer auf "Spielen" und wechselt zu der Spielaktivität, in der die Hauptaktion des Spiels stattfindet. In dieser zweiten (Spiel-) Aktivität gibt es ein paar Stellen, an denen ich überprüfe, ob es das vollständige / gekaufte Spiel ist, indem ich auf diese globale statische Variable zugreife und bestimmte Funktionen entsprechend aktiviere oder deaktiviere.
Jetzt spielt der Benutzer und trifft irgendwann die Home-Taste oder wechselt zu anderen Apps. Nach einiger Zeit kehrt der Benutzer zu meinem Spiel zurück und startet es von den letzten Apps, was das Spiel dort öffnet, wo es aufgehört hat, das heißt direkt in der zweiten (Spiel-) Aktivität, und der Benutzer spielt glücklich weiter.
Darf ich annehmen, dass der Wert meiner globalen statischen Variable zu diesem Zeitpunkt entweder True oder False sein kann, abhängig davon, ob der Prozess zerstört wurde oder nicht, oder gibt es eine Garantie, dass Android seinen Wert wiederherstellen wird. Ich denke, dass, wenn der Prozess am Leben erhalten wurde, der Wert Wahr bleiben wird (wie er in der ersten Aktivität gesetzt wurde) und so lange erhalten blieb, wie der Prozess am Leben gehalten wurde; oder wenn der Prozess zerstört wurde und der Benutzer später darauf zurückkommt und mein Spiel direkt in der zweiten (Spiel-) Aktivität öffnet, dann würde der Wert der globalen statischen Variable in diesem Fall auf False gesetzt (genau wie es in der Klasse definiert ist) Ebene, und ohne eine Chance, in der ersten Aktivität gesetzt werden).
Vielen Dank für Kommentare.
Bin ich richtig anzunehmen, dass an diesem Punkt der Wert meines globalen Statische Variable kann entweder True oder False sein, abhängig davon, ob Prozess wurde zerstört oder nicht, oder gibt es eine Garantie, dass Android wird seinen Wert wiederherstellen. Ich denke, wenn der Prozess beibehalten wurde Lebend, dann bleibt der Wert True (wie er in der ersten gesetzt wurde) Aktivität) und blieb erhalten, solange der Prozess am Leben gehalten wurde; oder wenn der Prozess zerstört wurde und der Benutzer später darauf zurückkommt, und öffnet mein Spiel direkt in der zweiten (Spiel) Aktivität, dann das globale Der Wert der statischen Variable würde in diesem Fall standardmäßig auf "False" (genau wie Es ist auf der Klassenebene definiert und ohne eine Chance, in sie eingefügt zu werden die erste Aktivität).
Ja, Sie haben Recht . An diesem Punkt ist der Android-Anwendungsprozess .
Dennoch hat Ihr Anwendungsprozess, der es ausführt, persistenten Wert für Ihre Variable TheGlobals.IsFullGame
.
Jetzt spielt der Benutzer und trifft irgendwann die Home-Taste oder schaltet um zu anderen Apps. Nach einiger Zeit kommt der Benutzer zurück zu meinem Spiel, Starten Sie es von den neuesten Apps, die das Spiel dort öffnet, wo sie sind links, das ist direkt in der zweiten (Spiel) Aktivität und der Benutzer läuft glücklich weiter.
Da Ihre Anwendung im Hintergrund verfügbar ist, bedeutet dies, dass der Anwendungsprozess ausgeführt wird, damit Sie die richtigen Werte erhalten.
Nun, was ist,
Einfaches Android-System beendet Ihren Anwendungsprozess, um den Status einer anderen Anwendung zu erhalten, und Sie erhalten den Standardwert Ihrer Variablen, wobei kein Status beibehalten wird
Beim Starten des Geräts muss der Benutzer die Anwendung von Anfang an starten und kein persistenter Status für die Variable, sondern nur den Standardwert.
In diesen Szenarien behält Ihre Anwendung also den Variablenwert bei, bis Ihre Anwendung ausgeführt wird und Speicherplatz auf dem System zugewiesen wurde (Anwendung, die Speicherplatz auf dem Arbeitsspeicher des Geräts abruft)
Lösung:
Sie müssen die Werte Ihrer Anwendungsvariablen beibehalten, bis die Lebensdauer der Anwendung so lange dauert, bis die Anwendung nicht vom Gerät entfernt wird. Verwenden Sie daher besser SharedPreference zum Speichern Ihres Variablenwerts, der solange persistent bleibt, bis Sie die Anwendung wechseln.
Tags und Links java android android-activity static global-variables