Referencia débil para la llamada de red mala idea?

En nuestro proyecto encontramos fugas de memoria debido a llamadas de red. La solicitud de red se dispara desde un fragmento y la respuesta vuelve a través de una devolución de llamada al fragmento. El problema es que cuando el usuario deja el fragmento, su no basura recogida desde la devolución de llamada está vinculado a ella. Por lo tanto, hay un escape de memoria.

Mi solución propuesta era anular la referencia de devolución de llamada en onStop de fragmento. De esa manera, GC puede encargarse de ello.

Otra solución que mi compañero de trabajo sugirió es usar a WeakReference para las devoluciones de llamada. El problema con eso es que la devolución de llamada obtiene la basura recopilada a menudo tal que ni siquiera obtener respuesta de las devoluciones de llamada (algún tiempo s cuando el usuario está esperando una respuesta). El problema es Weak Reference puede ser recolectado basura usando GC en cualquier momento.

Supongo que en este escenario, el uso de WeakReference no es una buena idea.

Qué piensan ustedes ?

Creo que deberías usar una referencia débil para la clase externa, pero no la devolución de llamada. No es la devolución de llamada realmente fugas sino la clase exterior. Significa que la devolución de llamada que está utilizando no es la que se debe recopilar sino la devolución de llamada.

Contéstame si tienes alguna pregunta 🙂

Creo que la WeakReference para el oyente de callback no es un buen patrón, porque el oyente de devolución de llamada puede ser GC con mucha facilidad, entonces hacer que usted callback nunca se llama. Sin embargo estoy totalmente de acuerdo con @MacFang respuesta It's not the callback really leak but the outer class .

De acuerdo con ambas respuestas. Gracias por tomar tiempo para responder.

La solución era envolver el "fragmento" en la referencia débil y no en la devolución de llamada, de modo que cuando la operación de red se haya completado, compruebe si el fragmento sigue vivo. GC recogerá el fragmento cuando no esté cerca.

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