Löschen statischer Daten onDestroy ()

8

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?

    
noob 17.03.2012, 10:07
quelle

5 Antworten

10
%Vor%

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.

    
zapl 17.03.2012, 11:07
quelle
4

In onDestroy() können Sie null -Werte auf diese static variables ..

setzen

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.

    
user370305 17.03.2012 10:13
quelle
1

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%     
Azhar Shaikh 17.03.2012 10:10
quelle
0

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.

    
Bhargav Panchal 17.03.2012 10:16
quelle
0

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.

    
user1135300 18.07.2016 10:42
quelle