Java.lang.OutOfMemoryError: android.support.v4.app.BackStackState de longitud 1279544898 se desbordaría
Estos bloqueos se producen de forma intermitente, mientras que el respaldo de mi actividad principal, que consta de dos fragmentos (uno que es un fragmento de apoyo de Google Maps). Si no fuera por nuestro sistema de seguimiento de accidentes, no tendría idea de que los usuarios estuvieran experimentando esto, ya que no es reproducible en ninguno de mis dispositivos físicos o emulados. Se extiende varias API entre mi min de 15 y mi objetivo de 22.
En el sistema de choque, el accidente está ocurriendo en una de dos formas:
- Fuga de memoria en Android al intentar enviar un formulario con imagen al servidor PHP
- Android Maps V2 pérdida de memoria LocationClientHelper
- Destruir vista (disposición)
- Kotlin: safe lambdas (no hay fugas de memoria)?
- ProgressDialog: cómo evitar la ventana filtrada
java.lang.OutOfMemoryError: android.support.v4.app.BackStackState[] of length 1279544898 would overflow
o
java.lang.OutOfMemoryError: Failed to allocate a 5118179604 byte allocation with 16777216 free bytes and 472MB until OOM near/at g.newArray:174
El bloqueo se produce en el método onViewCreated del fragmento que contiene mi mapa:
mMapView.onCreate(savedInstanceState);
Mi primer pensamiento es la fuga de memoria, pero … parece que está en bucle al crear la backstack – como si el índice de backstacks ha desbordado el largo. Leak Canary no encontró fugas de memoria (excepto para nuestro MainApplication, que sé que mantiene una referencia estática al contexto). Y si se tratara de una fuga de memoria típica, parece extraño que este choque siempre ocurriría en la misma línea y en ningún otro lugar. Hay otras áreas de uso intensivo de memoria de esta aplicación (que es la empresa, por lo que no puedo divulgar demasiado), pero ninguna de esas otras actividades han arrojado errores OOM.
También debo señalar que se trata de una aplicación madura, con muchos usuarios y versiones. El problema OOM ocurre SOLAMENTE en la versión beta de nuestro lanzamiento actual (de nuevo, basado únicamente en los registros de nuestro sistema de seguimiento de fallos, ya que no podemos repro en cualquier parte). He hecho completas comparaciones de código entre nuestra versión de producción y nuestra versión beta, y la mayoría de los cambios son relativamente estándar / trivial. (No he empezado a agregar nuevos bitmaps ni nada.)
Las especificaciones:
- Play Services 8.4.0
- Gradle 2.1
- API de destino 22
- Min API 15
- ProGuard habilitado
¿Alguien más está viendo esto? Puedo ver que el accidente está sucediendo, pero es terriblemente difícil de localizar cuando no puedo reproducirlo …
- RuntimeException: tipo de letra nativo no se puede hacer o pérdida de memoria para personalizado TextView carga de fuente
- ¿Se filtra siempre la primera instancia de MapActivity?
- ¿Google Maps API provoca fugas de memoria?
- Se detectó pérdida de memoria en las pestañas personalizadas de Chrome
- View.getViewTreeObserver (). AddOnGlobalLayoutListener Fragmento de fugas
- ¿Cómo estática clase interna con una WeakReference a la clase externa puede evitar fugas de memoria de Android? Necesito un ejemplo
- Memory Leak en Crashlytics Android
- ¿Está declarando una clase interna en una vista peligrosa?
Respondiendo a mi propia pregunta …
Fui capaz de reproducir el error mediante activado No mantener actividades en las opciones de desarrollador.
Después de tres días de pruebas, finalmente descubrí que nuestro servidor de compilación estaba compilando soporte 24 en lugar del soporte 22 que he especificado en Gradle. Evidentemente hay alguna incompatibilidad entre el soporte 24 y los mapas de Android. Cambiando:
compile 'com.android.support:support-v4:22.2.0'
a
compile('com.android.support:support-v4:22.2.0') { force = true }
Forzando así a Gradle a tomar 22 en lugar de los 24 posteriores a su disposición, el backstack de bucle se fue. Ahora ya no veo el OOM con nuestros usuarios beta.
Yo especulo que tiene algo que ver con el cambio de modelo de permisos de API, pero quién sabe.
De todos modos … espero que esto ayude a alguien.
- No se pudo administrar el error android.intent.package_ADDED y REMOVED al recuperar la ubicación mediante Fused Location API
- ¿Es posible instalar el JDK en un dispositivo android?