¿Es necesario establecer los oyentes de la interfaz Fragment a null en detach?

En Ejemplos de fragmentos que impliquen devoluciones de llamada, normalmente asignan al oyente en el método onAttach y, a continuación, establecen el oyente en null en el método onDetach.

¿Es necesaria esta última parte? ¿El oyente no se establece automáticamente en nulo cuando el fragmento es desprendido / destruido? ¿O hay situaciones en las que puedes separar el fragmento y volver a conectarlo en otro lugar, y no quieres que la devolución de llamada apunte a algo en particular hasta que se vuelva a conectar a algo?

    Nunca he definido explícitamente referencias de oyente a null , ya que en la mayoría de los casos no hará una diferencia.

    Aquí hay algunas aclaraciones sobre sus otras preguntas:

    • ¿El oyente no se establece automáticamente en nulo cuando el fragmento es desprendido / destruido? Realmente no. onDetach() y onDestroy() reflejan el ciclo de vida del componente, pero no el ciclo de vida del objeto. Nada automático sucederá allí. Cuando su instancia de fragmento es recogida de basura, la referencia al oyente será destruida con él. Si esta es la única referencia a su oyente, también será elegible para la recolección de basura.
    • ¿O hay situaciones en las que puedes separar el fragmento y volver a conectarlo en otro lugar, y no quieres que la devolución de llamada apunte a algo en particular hasta que se vuelva a conectar a algo? Yo diría que esto es altamente improbable. En un caso de uso normal, tendría que asignar el oyente en onAttach() , por lo que está seguro de que puede delegar eventos correctamente. Después de onDetach() , no recibirá ningún evento que requiera delegación, hasta que vuelva a adjuntar el fragmento. Y, si lo vuelve a adjuntar, entonces tendrá la instancia de escucha correcta, ya que ya se ha encargado de eso en onAttach() .

    Es mejor anular el oyente porque no sabes cuando el recolector de basura lo destruirá. No es realmente necesario hacer esto, pero es un buen estilo de codificación.

    Considere este escenario. Actividad elimina el fragmento. Por lo tanto, usted espera que la instancia de Fragment sea elegible para la recolección de basura. Pero inesperadamente, en algún otro lugar del código, una variable tiene una referencia a esa instancia de fragmento. De modo que la instancia de Fragmento no sería recogida de basura. Está desperdiciando nuestra memoria.

    Ahora, si no establecimos null al oyente en onDetach() , entonces la instancia de fragmento tiene referencia al oyente (que será la actividad principal). Así que aquí, toda la actividad se filtra. Por lo tanto, si establecemos el oyente para null en el onDetach() , sólo el fragmento de la instancia de fugas. Por lo tanto, establecer el oyente a null en el onDetach() es una buena práctica.

    Analizando su escenario, onDetach() será llamado, sólo cuando se elimine el fragmento. Así que durante el desacoplamiento y volver a conectar escenario, onDetach () wouldnt ser llamado.

    Nunca cierre ninguno de mis oyentes de la interfaz y uso un lof de ellos, nunca tuve ningún problema.

    La documentación oficial que explica la comunicación entre fragmentos no cierra el oyente en el ejemplo tampoco.

    También puede comprobar por sí mismo en la muestra oficial disponible aquí , los oyentes no están cerrados en los fragmentos. Creo que Google habría al menos mencionado si era necesario.

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