FragmentStatePagerAdapter fuga de memoria (fragmentos anidados con viewpager)

Tengo una "fuga de memoria" en mi adaptador (las cotizaciones se explicarán más adelante). Actualmente utilizo fragmentos anidados para alojar un viewpager.

Mi configuración es la siguiente:
1. Actividad (actividad vacía que alberga el fragmento A)
2. Fragmento A – fragmento que aloja el viewpager con Fragmentstatepageradapter. Cada página de viewpager hospeda el fragmento B.
3. Fragmento B: fragmento que contiene una vista de imagen.

Todo está funcionando muy bien, excepto cuando se produce un cambio de configuración. Supervisando el montón, parece crecer por 100 kb cada vez que se produce una rotación. Manualmente GCing no libera la memoria.

Cosas que he probado:
1. Reemplace el fragmento B con un fragmento en blanco. El mismo problema ocurre por lo que no es la vista de imagen que está causando el problema.
2. Retire ambos fragmentos A y B y gire la actividad. No hay fugas de memoria por lo que no es la actividad.
3. MAT usado antes de cualquier cambio de orientación y después de girar alrededor de 50 veces para obtener el montón. MAT muestra 1 sospechoso principal que es mi clase de adaptador. Muestra 7MB de montón retenido (muy pequeño montón superficial) de observadores como así:

array java.util.ArrayList @ 0x42079938 24 7,000,832 .\mObservers android.database.DataSetObservable @ 0x42053508 16 7,000,848 ..\mObservable com.example.main.Adapter@ 0x4205a048 40 7,001,416 

¿Por qué estoy usando un viewpager dentro de un fragmento:
1. Quiero mantener vivo el estado del adaptador y otras variables relacionadas con el viewpager estableciendo setretaininstance (true).
2. Después de un cambio de configuración, no vuelvo a crear el adaptador pero uso el antiguo para adjuntar al viewpager.
3. Si no vuelvo a usar el adaptador antiguo pero creo un nuevo adaptador después de un cambio de configuración, la pérdida de memoria desaparece.
4. la pérdida de memoria también desaparece después de cerrar la actividad y volver a la actividad anterior.

¿Algunas ideas? Apreciaría cualquier ayuda.

Gracias, JC

Tuve una fuga de memoria similar que ahora se ha resuelto.

En mi Fragmento A correspondiente, estaba instanciando el FragmentStatePagerAdapter con this.getFragmentManager() lugar de this.getChildFragmentManager() ya que los fragmentos anidados están en su lugar.

Por favor, hágamelo saber si esto también corrige su problema.

  • Error fatal: Adreno-GSL
  • Android java, obtener más uso de memoria permitido
  • OutOfMemoryException en el emulador
  • ¿Cuál es el resto del gráfico principal de Eclipse Memory Analyzer?
  • No se pueden obtener asignaciones en Android 4.4.4
  • guardar una cadena en la memoria interna y luego mostrarla
  • Uso de la memoria V8
  • ¿Cómo utilizar los controladores?
  • android R.integer devuelve incorrecto Valor extremadamente grande que causa fuera de mem mientras que crea el arsenal
  • El objeto de conexión de SQLite se filtró - Android
  • ¿Por qué Android HCE no admite Mifare Classic?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.