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.
- Los archivos masivos de hprof que se crean de alguna manera, me impide empujar
- Cómo encontrar fugas de memoria del código nativo en android
- Alineación de la memoria en iPhone y Android
- Android - Cómo obtener el uso de memoria de mi dispositivo Android
- Fuga de memoria AsyncTask
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
- ¿Cómo utilizar Valgrind con la aplicación android en Eclipse en Ubuntu para encontrar fugas de memoria de código nativo android en tiempo de ejecución?
- Fuera de los errores de memoria se producen con un tamaño de montón alto pero tamaño asignado bajo. ¿Por qué?
- Límite de memoria interna para la tableta sin función de tarjeta SD
- Tabla de referencia local de JNI de Android Expand
- El método android finish () no borra la aplicación de la memoria
- Android: fugas de memoria al crear dinámicamente UI con fondos de recursos de imagen
- Android FinalizerReference con 7mb de RAM
- Android WebView - Fuga de memoria de JavaScript
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.