Android Contexto Referencia débil
En algunas de mis aplicaciones, utilizo algunos objetos singleton como "administradores". Los instancio en Application.onCreate
y les paso el ApplicationContext
, que WeakReference
en una WeakReference
.
Algunos de los métodos del "administrador" comienzan una tarea de fondo después de ser llamado de una Activity
, así que paso el context
de la actividad al método, y guardo una WeakReference
a eso también (y uso eso dentro de un AsyncTask
). Esa referencia se mantiene hasta la próxima vez que una Activity
llama a un método que va al fondo, cuando la WeakReference
se establece en el context
la nueva Activity
.
- ¿Cómo obtener AssetManager sin referencia al contexto?
- Comprobar y evitar fugas de memoria en la aplicación
- ¿Qué significa exactamente usar el contexto de aplicación?
- Obtener contexto dentro de onClick (DialogInterface v, int buttonId)?
- ¿Cuándo llamar al contexto de la actividad O contexto de la aplicación?
Mi pregunta es, ¿el ApplicationContext
tiene que ser guardado en un WeakReference
, y hay algún problema con mantener el context
la Activity
como eso?
- ¿Hay una manera de llamar `overridePendingTransition` de una clase que no extiende la clase Activity?
- Diferencia en contexto esto y getContext ()
- No es accesible en el contexto actual
- Cómo funciona SQLiteOpenHelper Context
- Context.registerReceiver devuelve una intención nula al intentar comprobar si la fuente de alimentación está conectada
- Cómo verificar correctamente el permiso de Android dinámicamente
- Finalizar la actividad de llamada cuando se completa AsyncTask
- ¿Cada actividad en android tiene su propio contexto? ¿Cuál es el escenario con múltiples actividades en una sola aplicación
La razón para mantener un WeakReference
al WeakReference
de la actividad es para que no mantenga una referencia a una Activity
que ha sido o de otra manera debería ser destruida ya. No existe tal problema para la Application
. Una WeakReference
es innecesaria en ese caso.
Es difícil comentar sobre su uso del contexto de la actividad, ya que no ha detallado lo que está utilizando para exactamente. Suena un poco sospechoso que estás intercambiando el contexto para diferentes actividades. Si realmente necesita un contexto de actividad específica, esto podría estar bien, pero si simplemente desea un Context
válido para usar con un AsyncTask
entonces consideraría repensar su enfoque. Probablemente funcione, pero es un poco hacky. Hay otras opciones que pueden ser más apropiadas dependiendo de sus necesidades: IntentService
y IntentService
son opciones a considerar.
En general, no es necesario mantener el contexto de la aplicación en una WeakReference. Sin embargo, debe mantener otros tipos de contextos en una WeakReference.