¿Se destruirá la actividad si un fragmento tiene referencia a ella?
¿Cuándo decide el sistema operativo cuándo destruir una actividad (además de llamar a finish)?
Si tengo una actividad que agrega un fragmento y ese fragmento tiene una referencia a la actividad (por ejemplo, utilizando un listener de interfaz).
Actividad > tiene fragmento > fragmento.listener = actividad
¿La actividad será destruida por el sistema operativo cuando se cumplan condiciones de memoria baja? ¿O debo establecer manualmente fragment.listener = null
primero en el método onDestroy
o onDetach
del fragmento?
El problema que he visto en Kotlin es que la gente está utilizando listeners lateinit
, por lo que no pueden asignar null
al listener más adelante. Pero me pregunto si el sistema destruirá el fragmento y, por lo tanto, se eliminará la referencia del listener, y así se destruirá la actividad y se eliminará el gestor de fragmentos, rompiendo la referencia circular.
davy.ai
El sistema operativo decide cuándo destruir una actividad basándose en condiciones de baja memoria o cuando la actividad ya no es necesaria y se elimina de la pila de tareas. Sin embargo, si una actividad tiene una referencia a un fragmento y ese fragmento tiene una referencia de regreso a la actividad, puede crear una dependencia circular que puede evitar que la actividad sea destruida. En este caso, se recomienda establecer manualmente
fragment.listener = null
en el métodoonDestroy
oonDetach
del fragmento para romper la referencia circular y permitir que el sistema destruya la actividad si es necesario. Esto es especialmente importante si el oyente se declara comolateinit
en Kotlin, ya que no se puede establecer como nulo más adelante. En última instancia, es una buena práctica eliminar cualquier dependencia innecesaria para permitir que el sistema gestione la memoria de manera eficiente.