WebView consumiendo demasiada memoria

En mi aplicación hay dos actividades a saber A y B.

Actividad A:

Tiene una lista que muestra información acerca de un elemento brevemente. Cuando se hace clic en un elemento de A, carga la Actividad B.

Actividad B:

Tiene dos vistas de la tela y varias vistas de lista. La parte superior de la actividad está ocupada por la vista web de encabezado. Parte inferior de la actividad tiene el host de tabulación, que alberga la segunda vista web en la primera pestaña y la pestaña restante alberga cada una una vista de lista.

Problema:

Cuando el usuario navega de A a B, el tamaño del montón aumenta significativamente. Incluso después de navegar de nuevo de B a A, el tamaño del montón sigue siendo el mismo. Ni siquiera hay una disminución de bytes, de hecho, aumenta a veces. Sí, es debido a estas vistas web. He leído sobre fugas de memoria de vista web en SO y otros sitios. He seguido el enfoque mencionado aquí

  1. Añadido vista web de forma dinámica dentro de un contenedor [RelativeLayout]. Se eliminó la vista web de las actividades enDestroy
  2. Vista web subclasificada como se sugiere en el artículo de SO
  3. Borrado de la caché de la vista web cada vez, etc

No importa qué tamaño de montón no vuelve a lo que era antes de navegar a B.

Realmente apreciar si alguien me puede guiar a una posible solución

Nota:

Ya he leído esto y seguido este problema en SO. Fuga de memoria en WebView

Editar:

He intentado sin vistas web en B y el aumento en el tamaño del montón es muy, muy menos alrededor de 0,5 MB, pero con las vistas web se arruga por 4-5 MB

Los registros del tamaño del montón (conseguidos por la sugerencia siguiente mencionado aquí )

onCreate B debug.heap native: allocated 4.11MB of 4.17MB (0.01MB free) in [] debug.memory: allocated: 12.00MB of 96.00MB (1.00MB free) onDestroy B debug.heap native: allocated 8.66MB of 10.08MB (0.48MB free) in [] debug.memory: allocated: 12.00MB of 96.00MB (1.00MB free) on Resume A debug.heap native: allocated 7.94MB of 10.08MB (1.32MB free) in [] debug.memory: allocated: 12.00MB of 96.00MB (0.00MB free) 

Cruzé comprobado los números tomando el volcado del montón antes y después de que B se ponga en marcha y destoryed, el tamaño del montón está muy cerca del que lo consigo en registros

Seguí una serie de pasos y reduje la huella de la memoria. Esto es lo que hice, en lugar de crear webview estáticamente a través de xml Ahora crear webview mediante programación y añadirlo a un contenedor. Una vez webview ya no es necesario eliminar la webview del contenedor, a continuación, eliminar todas las vistas de webview y llamar a destruir en él. Eventualmente, la memoria asignada se reduce.

 private void releaseWebView() { webViewContainerRelView.removeAllViews(); if(mWebView != null){ mWebView.setTag(null); mWebView.clearHistory(); mWebView.removeAllViews(); mWebView.clearView(); mWebView.destroy(); mWebView = null; } } 

Llamo a releaseWebView () del método onDetachedFromWindow de Activity como se muestra a continuación.

 @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); releaseWebViews(); } 
  • ¿Se puede usar la API de PostMessage para comunicarse con un WebView de Android?
  • Desplome de la disposición de JellyBean
  • Android (Samsung S4) Pausas de vídeo HTML5
  • WebView shouldOverrideUrlLoading () no se invocan enlaces no válidos
  • ¿Cómo mostrar los resultados de búsqueda predeterminados de Google para Android en la vista web?
  • ¿AddJavascriptInterface () depende de getClass ()?
  • Android: Cómo hacer que un botón sea visible una vez que se haya completado la visualización web
  • WebViewFragment webView es nulo después de realizar una FragmentTransaction
  • Android WebView personalizado no logra encontrar funciones de javascript definidas en HTML cargado
  • Compartir cookies desde la vista web con BasicHttpRequest en Android
  • Abrir archivos PDF en la vista web de Android sin utilizar GoogleDocViewer
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.