Tengo una clase de Preferencias estática que contiene algunas preferencias de aplicaciones y cosas por el estilo. ¿Está bien almacenar la referencia a ApplicationContext allí? Necesito esa referencia para poder obtener una carpeta de caché y cosas así en clases que no heredan Activity.Android: almacenamiento de referencias a ApplicationContext
Respuesta
Tiene razón al usar el ApplicationContext
allí ya que si no lo hace it can cause significant memory leaks.
Sin embargo, el problema que tiene es que la variable static
no puede conservar su valor. Debido a la forma en que Android maneja las aplicaciones, es posible que su aplicación se cancele y luego se reinicie, generalmente debido a que el usuario cambia a otras aplicaciones, de tal forma que su variable static
se convertirá en nula y su código que lo establece se ganará ' se ejecutará Have a look at this question for a more detailed answer.
Es posible evitar este problema pero probar todas las posibilidades que pueden hacer que su variable termine en null
sería lento y propenso a errores. Por lo tanto, en mis clases de preferencia estática, hice que cualquiera de los métodos que requieren un Context
lo tome como argumento. Por ejemplo:
static int getSomeIntegerPreference(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);
}
Es feo pero funciona.
- 1. C++ Almacenamiento de referencias a valores en std :: map
- 2. Cómo acceder a ApplicationContext desde un controlador
- 3. Spring ApplicationContext Bean Scope
- 4. Android: referencias a un contexto y fugas de memoria
- 5. Cómo inyectar ApplicationContext en sí
- 6. android teléfono interno de almacenamiento
- 7. Android: ¿es eficiente almacenar referencias a Vistas como variables miembro?
- 8. Instancia diferente de Applicationcontext en Broadcastreceiver
- 9. Problema de almacenamiento de datos de Android
- 10. Android openFileOutput: sin permiso para crear almacenamiento
- 11. Vectores de referencias a objetos
- 12. Android problemas externos de almacenamiento de datos
- 13. Video en WebView - ApplicationContext vs Activity Context
- 14. ¿Por qué usar las jerarquías Spring ApplicationContext?
- 15. C++: ¿por qué no podemos tener referencias a referencias o matriz de referencias?
- 16. Prueba con Spring y Maven: applicationContext
- 17. ¿Referencias a variables en C#?
- 18. referencias abstractas a interfaces genéricas
- 19. Referencias legales a Java Java
- 20. El seguimiento de referencias de Android no funciona
- 21. Semantics de movimiento y referencias de referencias
- 22. Otros usos de referencias débiles?
- 23. C++ de referencias entre un puntero a
- 24. Lista/Recolección de referencias a las propiedades
- 25. JAXB Asignación de referencias cíclicas a XML
- 26. Acceso a VBA - referencias de archivo relativas
- 27. Escribiendo al almacenamiento privado interno en Android
- 28. Mejor práctica de la inyección de ApplicationContext en Spring3
- 29. Android: Cómo detectar "Transmitir almacenamiento USB" ¿Transmisión?
- 30. Android Almacenamiento interno VS Preferencias compartidas
Bueno, configuré Preferences.applicationContext para getApplicationContent() en el primer inicio de la actividad. Así que creo que debería estar allí a menos que la aplicación muera (VM muere, el proceso se vuelve fatal, etc.). Y si se muere, en el próximo inicio inicializará Preferences.applicationContext de nuevo, así que creo que debería funcionar bien. Necesito algo así, porque necesito acceso al contexto en algunas clases que no ven getApplicationContext(). Por ejemplo, mi clase Categoría necesita descargar íconos para cada categoría, así que configuro icon_path para esto. filepath = Preferences.applicationContext.getCacheDir(). ToString – nixa
Deberá inicializar 'Preferences.applicationContext' en * every * Activity que use su clase' Preferences'. Su proceso podría morir cuando ejecuta una actividad diferente a su primera actividad y Android puede devolver al usuario a ese punto en su aplicación, omitiendo la primera actividad. –