2011-02-17 7 views
10

Estoy creando una aplicación de lector de noticias que, a veces, carga páginas web en un WebView.¿Alguien ha limitado con éxito el tamaño de la memoria caché de su WebView?

Me di cuenta de que con el comportamiento predeterminado, la memoria caché puede ser muy poco razonable muy rápidamente. Ya sea que Android borre ese caché o no cuando la memoria baja, no estoy de acuerdo con que mis usuarios vean una aplicación de noticias de 15MB cuando todo, excepto el caché web, es de aproximadamente 1MB.

Sin embargo, me encantaría usar el caché hasta cierto punto. Vi WebSettings # setAppCacheMaxSize() y parecía que era solo el ticket.

Parece que no hace nada. Codifiqué lo siguiente en un método invocado por onCreate() de mi actividad antes de que se cargue algo:

originalSourceWebView.getSettings().setAppCacheMaxSize(300*1024); (Estaba usando un valor configurable más grande, pero lo dejé caer para confirmar mi problema).

Soplo justo por 300KB sin ninguna fanfarria, como se muestra en settings->applications->manage applications->click on my app. Estoy escuchando en WebChromeClient # onReachedAppMaxCacheSize para eventos, pero parece que nunca se dispara.

¿Alguien ha utilizado esto con éxito? ¿Hay algún caché diferente que debería tratar de administrar? Los documentos parecen bastante escasos. Ingresé a la fuente de Android pero solo envía valores al código nativo, y no sé cómo profundizar en eso.

Mi entorno de prueba es un nexo uno en 2.2.2. Sé que tendré que hacer las llamadas de caché por reflexión para soportar 1.5 y 1.6, pero si no puedo hacer esto, no habrá necesidad.

+0

Lo he intentado, porque tenía curiosidad. Probé ese método, pasando 1024 y luego 1, y nunca parece descartar el evento, nunca se llama aReachedAppMaxCacheSize. Estoy usando un Nexus 1 con 2.2.1. Puedo probar un HTC Desire y un Samsung Galaxy Tab con comentarios. – mdelolmo

+0

He probado lo mismo en una Samsung Galaxy Tab (originalSourceWebView.getSettings(). SetAppCacheMaxSize (1);) y no tengo nada en absoluto. ¿Se supone que esto funciona? – mdelolmo

Respuesta

6

No creo que haya una API para hacer lo que quiera.

setAppCacheMaxSize limita el tamaño de caché para la API de caché de aplicaciones HTML5 - el almacenamiento sin conexión que las aplicaciones HTML 5 pueden usar mientras se ejecuta en su WebView - pero parece que quiere limitar el caché utilizado para cargar páginas. imágenes, etc.

Como solución alternativa puede llamar al WebView.clearCache periódicamente, aunque eso realmente limita la efectividad de la memoria caché. Si desea intentar mantener algunas páginas recientes, puede buscarlas en CacheManager antes de borrar la caché y luego restaurarlas después.

+1

Gracias Mike, eso tiene sentido. – MaximumGoat

+0

Golpeé el retorno de ese primer comentario un poco demasiado rápido ... luego pasé demasiado tiempo editándolo. Lo que quise decir es: tiene sentido que estaría limitando algo más en lugar de estar completamente roto. Una breve búsqueda de CacheManager sugiere que realmente no aprecio ser entrometido, pero aún podría intentarlo. Lo más probable es que limpie el caché regularmente en su lugar. – MaximumGoat

Cuestiones relacionadas