In meiner Anwendung gibt es eine Klasse, in der ich einige static
Variablen deklariert habe. Das Problem ist, dass Werte für alle Variablen nicht zurückgesetzt werden, wenn die Anwendung zerstört wird.
Gibt es eine Möglichkeit, die Werte aller statischen Variablen zurückzusetzen, wenn die Anwendung zerstört wird, außer sie einzeln in onDestroy()
zurückzusetzen?
Sie können statische Variablen auf null
oder einen beliebigen Wert zurücksetzen, aber statische Variablen für andere Dinge verwenden, dann ist Konstanten normalerweise eine schlechte Idee - es ist normalerweise ein schlechtes Klassen-Design und kann zu unerwartetem Verhalten wie dem, das Sie beobachtet haben, führen / p>
Der Wert von statischen Variablen bleibt erhalten, solange die Klasse geladen ist - sie hat fast nichts mit dem Aktivitäts-Lebenszyklus zu tun ( onCreate
, ..., onDestroy
)
Wenn Sie zum ersten Mal auf eine Klasse aus dem Code zugreifen, wird sie geladen, und dann wird sie nicht mehr gelöscht, bis ein Grund zum Entladen vorliegt. Während dieser Zeit liest alles aus Ihrer App (technisch innerhalb desselben Prozesses - normalerweise verwendet jede .apk ihre eigene) den gleichen Wert aus diesen Statiken. Und wenn Sie es von verschiedenen Orten ändern, ändern Sie es für andere Teile, die die Änderung nicht kennen - deshalb ist es schlecht:)
Der einzige Grund (ich weiß), dass Android eine Klasse entlädt, ist, dass Ihre App vollständig aus dem Speicher entfernt wird - entweder über einen Task-Killer oder wenn Ihre App nicht mehr aktiv ist und der Speicher knapp wird. Das liegt völlig außerhalb Ihrer Kontrolle und sollte nicht passieren, während Ihre App verwendet wird. Es könnte passieren, wenn z.B. Ein Anruf kommt und Ihre App wird später fortgesetzt.
In onDestroy()
können Sie null -Werte auf diese static variables
..
BEARBEITEN:
Static variables
werden erstellt und initialisiert, wenn die Klasse enthält
Sie werden vom Klassenlader in die VM geladen. Wenn die Klasse ist
entladen oder die VM beendet, gehen die statischen Variablen "poof". Es gibt
im Allgemeinen keine Notwendigkeit, sie zu löschen.
Ich nehme an, wenn du wolltest, könntest du sie in einem onTerminate löschen ()
Methode (in der Anwendung) oder eine onDestroy()
-Methode (in einer Aktivität),
aber das hat nicht viel Sinn, und dafür gibt es keine Garantie
eine dieser beiden Methoden wird aufgerufen.
Wenn Sie aus irgendeinem Grund paranoid sind über die Variablen nicht sein
gelöscht, wenn erstellt (eine schwerwiegende Verletzung der "Vertrag" der VM), Sie
könnte sie in einer onCreate()
-Methode löschen.
Das ist nicht möglich, deine statische Variable muss klar sein, wenn deine Aktivität zerstört wurde. Es ist möglich, dass Ihre statische Variable in einer anderen Aktivität deklariert wird und Sie andere Aktivitäten zerstören.
%Vor%Wenn Ihr Aktivitätsstern Ihre Variable überprüft. Sobald die Aktivität zerstört ist, wird die gesamte Variable erneut initialisiert. Überprüfen Sie Ihren Variablenwert. Es ist unmöglich, wenn die Aktivität zerstört ist, ist der Wert der Variablen gleich. Überprüfen Sie das, wenn der Wert Ihrer Variablen initialisiert wurde.
ODER Neu initialisierte Variable in der Destroy-Methode. Statische Variable="" oder Statische Variable = null.
Wenn Sie Ihre statischen Variablen onCreate zurücksetzen, sind sie nicht mehr statisch und Sie können genauso gut eine nicht statische Variable verwenden.
In der Tat ist es wahrscheinlich besser, wenn Sie dies tun, weil die Synchronität zwischen dem angegebenen statischen Variablenverhalten und dem Android-App-Lebenszyklus nicht ausreicht.
Tags und Links android android-activity static