Qualcuno può illuminarmi sulla sicurezza di una classe che detiene valori globali in Android?Una classe "Globals" con variabili statiche in Android è sicura?
Ecco un breve esempio di ciò che intendo:
public class Globals {
public static int someVariable = 0;
public static User currentUser = null;
public static Handler onLogin = null;
}
Poi da qualche parte in un Activity
faccio la seguente:
Globals.someVariable = 42;
Globals.currentUser = new User("John", "Doe");
devo fare affidamento su Globals.currentUser
a più posti nel mio app come appena l'utente ha effettuato l'accesso, ma non sono sicuro se dovrei farlo, e anche se potessi usare un gestore come questo.
Ho letto ovunque che un'app per Android potrebbe essere uccisa in qualsiasi momento, significa che viene uccisa completamente o forse solo una parte di essa, quindi uccide solo la mia classe Globals
?
O c'è qualche altro modo per memorizzare i dati disponibili a livello globale in modo sicuro, senza dover scrivere ogni cambio membro al database (in realtà, la mia classe User
è un po 'più complessache in questo esempio. ;-)
Grazie per il vostro impegno!
Edit: Ok, ecco quello che ho finalmente fatto:
public class MyApp extends Application {
private static MyApp _instance;
public MyApp() {
super();
_instance = this;
}
public static MyApp getContext() {
return _instance;
}
....
private User _user = null;
public User getUser() {
if (_user == null) _user = new User();
return _user;
}
}
quindi modificare il AndroidManifest.xml
e aggiungere android:name=".MyApp"
per il nodo application
a dire l'applicazione per utilizzare la sottoclasse.
Finora tutto funziona correttamente e posso accedere facilmente all'attuale Context
(ad esempio in SQLiteOpenHelper
) chiamando MyApp.getContext()
.
possibile duplicato di [È statico sicuro in Android?] (Http://stackoverflow.com/questions/1203434/is-the-static-safe-in-android) –
@ z00l Non so se il tuo il secondo approccio è migliore del primo. Se è più facile per te mantenere il codice base in questo modo, bene. Ma Android non uccide (garbage-collect) variabili statiche globali solo perché l'applicazione è stata uccisa (e probabilmente riavviata con lo stesso stack di attività). Ricorda, Java è Java e Android è Android. La gestione delle applicazioni di Android non è necessariamente la stessa dell'allocazione di memoria di Java per le variabili statiche globali. –