Cómo controlar el uso de memoria cuando se llama a varios WebView en Android?

La actividad principal de mi aplicación es una Activity que contiene una Webview Web para cargar páginas web.

shouldOverrideUrlLoading(WebView view, String url) el método shouldOverrideUrlLoading(WebView view, String url) para que cada solicitud de URL solicite una Intent y cargue en una nueva misma actividad que contenga WebView .

Hacer esto es proporcionar una mejor experiencia cuando se presiona la tecla BACK, acaba de terminar la actividad actual y volver a la actividad anterior, no necesita tiempo para volver a la página de comparación para usar goBack () en la única webview.

Pero ahora el problema es que, después de abrir muchas URL, creando una larga cola de actividades en segundo plano, la memoria que utiliza se hizo grande.

Cuando vuelvo al lanzador y comprobar los progresos, puedo ver mi aplicación cachés más de 200M de datos. Esto no es aceptable…

Y es interesante ver que mi aplicación utiliza mi memoria, pero en la vista Heap de DDMS en Eclipse puedo ver la aplicación asignada no más de 10M de memoria. Así que supongo que el 200M es webStorage caché por Webview ?

¿Hay alguna forma de controlar la memoria?

Estoy considerando sólo ahorrar quizás 5 capas de actividades a la vez y cuando regrese 5 veces simplemente saltar de nuevo a la página principal. Pero aún no sé cómo liberar memoria al lado de las 5 actividades que necesito, que nunca volveré a usar?

O si es porque el WebView está manteniendo la página web almacenada en caché automáticamente, ¿cómo puedo administrar esto manualmente? ¿Cómo establecer un límite de tamaño máximo de caché o cuenta de páginas?

En términos generales estoy de acuerdo con el comentario de Kevin. Creo que mantener varios objetos Activity alrededor para evitar la recarga de un WebView es contra-intuitivo para un entorno móvil con recursos tan limitados.

Dicho esto, usted tiene un montón de diferentes preguntas y posibilidades de solución, así que no tengo una sola respuesta en mente. Mire a través de estos enlaces para ver si algo es útil:

ActivityManager – tiene un montón de cosas que podría ser capaz de usar, echa un vistazo a es sub-clases.

ActivityManager.RunningTaskInfo – Nunca lo usó, pero parece tener algunas cosas útiles, especialmente con la determinación de las Activity que se están ejecutando.

ActivityManager.MemoryInfo – Puede darle información sobre la memoria del sistema disponible, así como un umbral inferior de la memoria.

Application.onLowMemory() : le informa cuando su aplicación ha sido un cerdo de memoria. Puede anular este método y comenzar a destruir la Activity cuando se convoca. Probablemente necesite llamar a super.onLowMemory() para asegurarse de que el sistema operativo maneja lo que necesita.

Una posible solución que implica controlar el número de actividades:

Anule la Application y cree una public static ArrayList<Activity> que contenga 5 objetos Activity . Siempre que realice un onCreate() para una Activity , puede agregar la Actividad a ArrayList y luego comprobar el tamaño. Si el tamaño es> 5, envíe una intent a la Activity en la posición 0 que hará que maneje la intención y el finish() llamada finish() . A continuación, quite el objeto de ArrayList .

No debería ser demasiado trabajo, pero lo malo es que tienes que manejar manualmente las cosas. Estoy seguro de que hay una solución más inteligente.

  • Creando WebView desde Chromium para Android
  • Aplicación existente explotando con Android 3.0 XOOM. ¿Fugas de ZoomButtonsController?
  • Cómo borrar el historial de webview en android
  • Android webView - cómo cambiar el color de fondo del diálogo webView?
  • Monkeyrunner no toca la vista web
  • Desactivar ventanas emergentes y alarmboxes en la vista web de android
  • WebView no procesa la página HTML local en el lanzamiento de la aplicación en Android 4.0.x Ice Cream Sandwich
  • Android WebView dentro de ScrollView solo desplaza scrollview
  • Android: NullPointerException en la vista web
  • Android WebView: deshabilitar el degradado del borde amarillo de desplazamiento
  • OnKeyDown dentro del fragmento WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.