Was ist der Lebenszyklus einer öffentlichen statischen Variable in Android?

8

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.

    
Levon 05.03.2015, 22:25
quelle

2 Antworten

5
  

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,

  1. wenn das Gerät Probleme mit niedrigem Speicher hat und Ihre Anwendung sich im Hintergrund befindet

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

  1. Was ist, wenn die Batterie schwach ist und andere Ausnahmefälle, bei denen das Gerät ausgeschaltet ist

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.

    
user370305 05.03.2015, 22:45
quelle
0

Afaik das ganze Programm ist gelöscht oder nicht. Also, wenn der Benutzer zum Spielbildschirm zurückkehren kann IsFullGame ist true oder die App wurde zerstört false .

    
Verim 05.03.2015 22:39
quelle