¿Es seguro que una vista haga referencia a la actividad que la muestra?

He ampliado la vista y la pasé una instancia de mi actividad así que la visión puede tener acceso a algunas variables y métodos del miembro.

Pero ahora estoy pensando que esto podría ser una fuga de memoria potencial, porque incluso después de la actividad se destruye, todavía tiene una referencia a la vista en una variable miembro, y viceversa. Así que el recolector de basura nunca puede limpiarlos.

Sin embargo, he visto en algunas de las demostraciones de la API de Google y ejemplos casos en los que han pasado la actividad a la vista como un oyente.

Esto está bien, recuerde que cualquier Vista ordinaria que cree de forma programática con su constructor tome un Contexto como su argumento -por lo general el Contexto que le da al constructor es justo this , o la Actividad en sí. Así que su vista ya tiene una referencia a su actividad. También puede obtener esto dentro de la clase View utilizando su método getContext() .

Cuando la actividad se destruye, permanecerá en la memoria hasta que el GC puede eliminarlo. Pero como parte de su método onDestroy, establece la referencia a cualquier Views que contiene a null, y así sucesivamente en el árbol View. A continuación, el GC puede eliminar con seguridad todas sus vistas de componentes. Una vez que se ha completado, no hay referencias dejadas a la actividad y otro paso de GC puede eliminarlo.

Todos los constructores de View toman el Contexto como un parámetro para que ya tengan una referencia. Tal vez publicar el código para la vista personalizada para que podamos revisarla.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.