Ho una classe di preferenze statiche che contiene alcune preferenze dell'applicazione e cose del genere. È corretto memorizzare il riferimento a ApplicationContext lì? Ho bisogno di questo riferimento in modo da poter ottenere la cartella cache e cose del genere in classi che non ereditano attività.Android - memorizzazione dei riferimenti a ApplicationContext
risposta
Si ha ragione di utilizzare il ApplicationContext
lì se non si it can cause significant memory leaks.
Tuttavia, il problema è che la variabile static
potrebbe non mantenere il suo valore. A causa del modo in cui Android gestisce le applicazioni è possibile che la tua applicazione possa essere uccisa e quindi riavviata, solitamente a causa del passaggio dell'utente ad altre applicazioni, in modo tale che la tua variabile static
diventi nullo e il tuo codice che la imposta vada ' essere gestito Have a look at this question for a more detailed answer.
Potrebbe essere possibile ovviare a questo problema ma testare tutte le possibilità che potrebbero causare la terminazione della variabile null
richiederebbe molto tempo e potrebbe comportare errori. Quindi, nelle mie classi di preferenze statiche ho realizzato uno qualsiasi dei metodi che richiedono un Context
prenderlo come argomento. Ad esempio:
static int getSomeIntegerPreference(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);
}
È brutto ma funziona.
- 1. Memorizzazione di riferimenti a elementi DOM
- 2. Memorizzazione di più riferimenti Firebase
- 3. Memorizzazione di riferimenti in una mappa
- 4. Come accedere a applicationContext da un controller
- 5. Scrapy: memorizzazione dei dati
- 6. Come iniettare ApplicationContext stesso
- 7. Efficace memorizzazione nella cache dei dati caricati su Android
- 8. memorizzazione dei dati dell'applicazione Android su scheda SD
- 9. Confronto dei riferimenti oggetto JNI
- 10. Spring ApplicationContext Bean Scope
- 11. Chiarimento dei riferimenti in C++
- 12. Memorizzazione dei dati nella memoria
- 13. CEDET: memorizzazione manuale dei tag
- 14. java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
- 15. Lifetimes e riferimenti a oggetti contenenti riferimenti
- 16. Dimensioni dei riferimenti in ambienti a 64 bit
- 17. Perché l'inizializzazione dei riferimenti a null è consentita in Java?
- 18. Impostazione dei riferimenti a una tabella tramite scaffolding in rubyonrails
- 19. Android Webview JavaScript - I riferimenti a script non funziona
- 20. Come accedere a primavera ApplicationContext nel metodo statico junit @BeforeClass?
- 21. Serializzazione dei dati di primavera di Embeddable con ManyToOne Riferimenti
- 22. Riferimenti a GUID
- 23. Corde Delphi e conteggio dei riferimenti
- 24. Memorizzazione dei puntatori utilizzando QListWidgetItem :: setData
- 25. Android: è efficiente memorizzare riferimenti a Views come variabili membro?
- 26. copia dei riferimenti una mappa in Java
- 27. SysUtils: ApplicationContext è null in ApplicationStatus (WebView)
- 28. Memorizzazione nella cache dei dati nei graal
- 29. Un'altra domanda sul conteggio dei riferimenti sicuri dei thread
- 30. Memorizzazione dei dati quando si utilizza Greasemonkey
Bene, ho impostato il mio Preferences.applicationContext per getApplicationContent() all'avvio della prima attività. Quindi penso che dovrebbe essere lì a meno che l'applicazione non muoia (VM muore, processo diventa killer, ecc.). E se muore, al prossimo avvio inizializzerà di nuovo Preferences.applicationContext quindi penso che dovrebbe funzionare bene. Ho bisogno di qualcosa del genere, perché ho bisogno di accedere al contesto in alcune classi che non vedono getApplicationContext(). Ad esempio la mia categoria di categoria deve scaricare icone per ogni categoria, quindi ho impostato icon_path su questo. filepath = Preferences.applicationContext.getCacheDir(). ToString – nixa
È necessario inizializzare 'Preferences.applicationContext' in * ogni * Attività che utilizza la classe' Preferences'. Il tuo processo potrebbe essere ucciso quando esegui un'attività diversa per la tua prima attività e Android può restituire l'utente a quel punto dell'applicazione, saltando la prima attività. –