Kann eine statische Klasse von Android beendet werden?

T

Tom299

Stammgast
122
Hallo,

mir ist gerade kein besserer Titel eingefallen, aber mich würde es mal interessieren, ob Android auch eine statische Klasse beenden (destroyen) kann?

Bei einer Activity ist es klar, wenn sie im Hintergrund liegt, dann gehts in onPause und evtl. auch in onDestroy (z.B. Speichermangel).

Ich habe eine statische Klasse, in der ich z.B. den eingeloggten Benutzer vorhalte und noch andere Einstellungen. Diese statische Klasse ist aber keine Activity, sondern einfach ne Standard-Java Klasse (public class). Kann es sein, daß Android auch diese statische Klasse bei Speichermangel beendet oder kann das nicht vorkommen?

Ein Tester hatte nämlich gestern einen Absturz der Anwendung und ich konnte sehen, daß es beim Zugriff auf eine statische Methode passiert ist. Aber eigentlich sollte dieser Wert immer gefüllt sein. Kann mir deshalb nur erklären, daß die Klasse beendet wurde?


Gruß,
Tom
 
Wo wird die Klasse referenziert?
 
Unter Android hat jede App ihre eigene VM. Ich würde erwarten, dass diese beim Beenden der App ebenfalls komplett beendet wird.
 
Hmm, da alle Methoden und Attribute statisch sind, gibt es auch keinen Konstruktor. Und zugegriffen wird eigentlich von nahezu allen Activities, die ich habe.

Wäre es sinnvoll, nen Singleton draus zu machen?
 
I would avoid using Static variables in Android, because Android often clears all Static data from your class if your app is paused and the phone is short on resources, leading to unexpected Null Pointer Exceptions. Search Google for "Android Static Null" for a better explanation.

Either ways (Static methods or Singletons), you should make sure your app has the ability to save state and restore it in case Android clears your static variables.

- java - android singleton vs static methods - Stack Overflow
- Android : Static variable null on low memory - Stack Overflow

Sieht dann wohl so aus, als würde genau das bei mir Eintreten, die statischen Werte werden gelöscht / null und später greife ich wieder darauf zu.
Die Frage ist jetzt, muß ich in JEDER Activity beim onPause meine statischen Werte in den SharedPrefs speichern? Oder gibts nen besseren Ansatz, wo man dies machen könnte / sollte?
 
Das kommt jetzt drauf an, was das für Daten sind. Wenn du die rein aus der Klasse heraus ohne weitere Informationen statisch initialisieren kannst dann solltest du das sowieso machen. Dann werden die auch wieder befüllt, wenn die Klasse wieder geladen wird.
Wenn du Informationen aus der laufenden Activity brauchst, dann musst du die natürlich sichern.
 
Bis auf den eingeloggten User sind alle Daten innerhalb der statischen Klasse initialisiert, die sind auch kein Problem. Nur beim User knallts ;-)

Bin jetzt auch dran, den Benutzer in den SharedPrefs zu speichern. Problem ist aber, daß mir der Context in der statischen Klasse fehlt. Ohne Context komm ich nicht auf die SharedPrefs. Ich möchte aber, daß die statische Klasse selbst den User aus den SharedPrefs lesen kann und nicht über eine Activity mittels Context ... Dafür hab ich momentan noch keine Lösung gefunden, vielleicht fällt mir ja noch was ein ...
 

Ähnliche Themen

M
Antworten
4
Aufrufe
1.168
swa00
swa00
H
Antworten
2
Aufrufe
1.307
Hcman
H
S
Antworten
7
Aufrufe
1.152
swa00
swa00
Zurück
Oben Unten