Después de leer el artículo Avoiding memory leaks de @RomainGuy me di cuenta de que mi aplicación Android actual está plagada con el error de pasar la actividad principal de la aplicación. Entonces cada vez que puedo, simplemente puedo reemplazar ese parámetro de actividad con Activity.getApplicationContext().Patrón de comando para pasar los métodos de actividad de la aplicación?
Pero hay ciertas clases en mi aplicación que aún necesitan ejecutar métodos que solo pueden ser miembros de la actividad principal de las aplicaciones.
Por lo tanto, estaba pensando en posiblemente utilizar el Command Pattern para solucionar este problema.
El problema es que, si nos fijamos en ese ejemplo:
public class SomeCommandExecuableOnlyByActivity implements Command
{
public void execute(Object data)
{
doIt(((MyActivity)data).getWindow());
}
}
estoy corriendo otra vez en el callejón sin salida del que necesita el pase alrededor de la actividad (esta vez disfrazado de Object
datos).
¿Cómo salgo de esta situación de "pollo & el huevo"?
¿Hay una mejor manera de abordar este problema?
No hay nada en ese artículo que afirma que "pasar la actividad principal de la aplicación en torno a" es un error. Ponerlo en miembros de datos estáticos * * es un error, y ese es el tema central detrás de sus primeros y terceros balas en la parte inferior del artículo. En mi humilde opinión, solo use 'Aplicación' cuando sepa específica y precisamente por qué lo está usando. No es un reemplazo general para 'Activity', particularmente para el trabajo de UI. – CommonsWare
@CommonsWare Gracias por señalar esta importante diferencia. En mi caso, conservo un miembro de datos SharedPreferences estático en mi actividad principal para acceder fácilmente a los distintos módulos de la aplicación. De modo que puedo acceder a las preferencias compartidas evitando pasar la Actividad principal como parámetro: 'MainActivity.staticPrefs'. ¿Esto se considera "* Poniéndolo en miembros de datos estáticos *"? – ih8ie8
Esa es una buena pregunta. Dado que 'SharedPreferences' es una interfaz, y no veo fácilmente dónde está la implementación concreta, no lo sé. Si el 'SharedPreferences' se sostiene sobre una' Context' - y puede ser que - entonces sería o bien tendrá que usar 'Application' o evitar el miembro de datos estático. Esperaría que 'Application' funcionara bien con' SharedPreferences'. – CommonsWare