Sto assumendo che si stia riferendo a campi statici di una classe, al contrario di classe statica che, come Wyzard ha sottolineato, è qualcosa di completamente diverso. Come regola generale, tenere le informazioni in campi statici non è una buona idea in Java. La ragione di ciò è che impedisce la possibilità di istanziare più istanze di qualunque cosa si memorizzi nella classe.
Nel caso specifico di un'applicazione Android, il modo migliore per affrontare il problema di avere dati memorizzati associati con l'applicazione stessa è quello di creare una sottoclasse della classe android.app.Application
e utilizzarlo per gestire i dati delle applicazioni-global:
class FooApplication extends Application
{
private String privData;
public String getPrivData() {
return privData;
}
}
Quindi è necessario dichiarare che questa classe è la principale classe di applicazione (anziché il valore predefinito Application
).Nel application
voce nel AndroidManifest.xml
aggiungere quanto segue:
<application android:name="com.example.application.FooApplication"
...>
...
</application>
È possibile poi cercare l'istanza di applicazione da qualsiasi punto all'interno della vostra applicazione utilizzando il metodo Context.getApplicationContext()
che sarà un'istanza della Application
sottoclasse:
FooApplication app = (FooApplication)Context.getApplicationContext();
String privData = app.getPrivData();
A seconda di dove si sta cercando di cercare sottoclassi di "Applicazione", potrebbe essere necessario richiamare "getApplicationContext()" senza "Contesto":
FooApplication app = (FooApplication)getApplicationContext();
String privData = app.getPrivData();
fonte
2013-02-26 07:34:47
Il modo migliore è utilizzare SharedPreferences – Pragnani
@Pragnani Le preferenze condivise sono buone per alcuni tipi di dati: piccole quantità di dati che si adattano a un modello chiave/valore e non impiegano molto tempo per essere caricate in memoria. Non si adatta a tutti i problemi. –
Vuoi dire un * singleton *? Una "classe statica" è una classe interna che non richiede un'istanza della sua classe di inclusione, che non ha nulla a che fare con la condivisione di dati a livello di applicazione. – Wyzard