studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java android android-fragments interface callback
aquí

java - programacion - ¿Es necesario establecer los detectores de interfaz de Fragment null en detach?



manual de programacion android pdf (4)

Considera este escenario. La actividad elimina el Fragmento. Por lo tanto, espera que la instancia de Fragment sea apta para la recolección de basura. Pero inesperadamente, en algún otro lugar de tu código, una variable tiene una referencia a esa instancia de fragmento. Entonces, esa instancia de Fragment no sería recogida de basura. Está desperdiciando nuestra memoria.

Ahora bien, si no establecemos null para el oyente en onDetach() , entonces la instancia del fragmento tiene referencia al oyente (que será la Actividad principal). Entonces aquí, toda la actividad se filtra. Por lo tanto, si configuramos el oyente como nulo en onDetach() , solo se onDetach() la instancia del fragmento. Por lo tanto, establecer al oyente como nulo en onDetach() es una buena práctica.

Analizando su escenario, se onDetach() solo cuando se elimine el Fragmento. Por lo tanto, durante el escenario de separar y volver a conectar, no se llamaría a onDetach ().

En los ejemplos de Fragment que implican devoluciones de llamada, generalmente asignan el oyente en el método onAttach y luego configuran el oyente en nulo en el método onDetach.

¿Es esta última parte necesaria? ¿El oyente no se establece automáticamente en nulo cuando el fragmento se separa / destruye? ¿O hay situaciones en las que podrías separar el fragmento y volver a colocarlo en otro lugar, y no querrás que la devolución de llamada apunte a nada en particular hasta que vuelva a unirse a algo?


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


Nunca cierro ninguno de mis oyentes de interfaz y utilizo muchos de ellos, nunca tuve ningún problema.

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

También puede verificar usted mismo en la muestra oficial disponible aquí , los oyentes no están cerrados en los fragmentos. Creo que Google lo habría mencionado al menos si fuera necesario.


Nunca he establecido explícitamente las 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 se separa / destruye? 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 basura, la referencia al oyente se destruirá con ella. 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 podrías separar el fragmento y volver a colocarlo en otro lugar, y no querrás que la devolución de llamada apunte a nada en particular hasta que vuelva a unirse a algo? Yo diría que esto es muy poco probable. En un caso de uso normal, debe 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, tendrá la instancia de escucha correcta, ya que ya se ocupó de ello en onAttach() .