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
.
- Android: Programe el modo de selección de texto en un WebView en Jelly Bean
- Política de seguridad de contenido de WebView
- Cargar archivo .HTML local con WebView
- ¿Cómo se muestran 2 vistas en 1 actividad (android)?
- Android - Descargar e instalar el archivo apk en 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?
- Webview no muestra la fuente Gujarati
- Desactivar el enlace automático de Webview
- Detectar el cambio de ubicación de la URL de webview de Android
- La concurrencia de webview de Android causó SQLiteException: la base de datos está bloqueada
- Android Webview: No se puede llamar a determinedVisibility () - nunca vio una conexión para el pid
- Videos que no se reproducen en modo de pantalla completa
- WebView en un fragmento (android.support.v4)
- La vista web de Android shouldOverrideUrlLoading no se llama
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.
- Android APK construido desde el estudio de Android y la consola tienen diferentes huellas digitales SHA
- Nexus 7 Spinners demasiado grande