es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , , ,

Answer

  1. Avatar for 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étodo onDestroy o onDetach 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 como lateinit 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.

Comments are closed.