android - studio - webview loaddata
ClearCache de Android Webview es muy lento (2)
Estoy usando WebViews en una aplicación de Android, y necesito evitar que las WebViews cacheen.
Desafortunadamente, parece que este objetivo aparentemente simple es casi imposible de lograr. La solución que he recurrido a utilizar es ejecutar webview.clearCache (true) en el evento onPageFinished para que la caché se borre cada vez que se carga una página. Hay algunos problemas ...
Me he dado cuenta de que a medida que el caché crece, el método clearCache tarda mucho tiempo en ejecutarse. A veces, si ejecuta clearCache y luego cambia a una actividad diferente que contiene una vista web diferente, esa vista web no se cargará durante unos segundos porque todavía está esperando que finalice la operación clearCache anterior.
Lo que es peor es que el tiempo de ejecución de las llamadas subsiguientes a clearCache no parece disminuir después de que la caché ya se haya borrado. Si la llamada a clearCache tarda 3 segundos en completarse e inmediatamente llamo a clearCache por segunda vez, entonces esperaría que la segunda llamada a clearCache se complete casi de inmediato. Pero eso no es lo que estoy experimentando; Estoy experimentando que la segunda llamada a clearCache aún demora aproximadamente 3 segundos.
Alguien más ha experimentado esto? ¿Hay alguna forma de mejorar el rendimiento? Esperar 2-3 segundos para que se cargue una vista web (desde el sistema de archivos local) es horrible.
EDITAR:
Esta es mi mejor alternativa para borrar el caché. Funciona más o menos, pero es un poco escamosa y no estoy 100% contento con ella (escrito en Mono c #):
public class NoCacheWebClient : WebViewClient
{
string previous;
public override void OnPageStarted(WebView view, string url, Android.Graphics.Bitmap favicon)
{
base.OnPageStarted(view, url, favicon);
if (!string.Equals(previous, url))
{
previous = url;
view.Reload(); //re-load once to ignore cache
}
else
{
previous = null;
}
}
}
1) Intente usar setAppCacheEnabled y setAppCacheMaxSize para limitar el tamaño de la caché a muy poco, menor tamaño de caché dará como resultado una limpieza más rápida.
wv.getSettings().setAppCacheMaxSize(1);
: wv.getSettings().setAppCacheMaxSize(1);
O
2) Si no necesita los datos en caché, simplemente configure setCacheMode (WebSettings.LOAD_NO_CACHE); , lo que significa "No usar el caché, cargar desde la red" , aunque los datos estén en caché.
En resumen, simplemente ignore los datos en caché, Android se encargará de eso.
O
3) también puede probar el siguiente código para no-caching,
Nota: esto solo está disponible para Android API 8+
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
view.loadUrl(url, noCacheHeaders);
O
4) Borre la caché cada vez que finalice la carga de la página. Algo así en el WebViewClient
.
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.clearCache(true);
}
O
5) Puede intentar borrar toda la base de datos en caché a la vez.
context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db");
Esto podría dar un resultado un poco más rápido, espero que sí.
Cuando vayas a la siguiente actividad, completa la actividad anterior. Para que pueda liberar toda la memoria ocupada por esa actividad. Espero que esto ayude.