我正在android应用程序中使用webviews,我需要防止webviews缓存。
不幸的是,看起来这个看似简单的目标几乎不可能实现。我使用的解决方案是在onpagefinished事件中执行webview.clearcache(true),以便每次加载页面时清除缓存。有一些问题…
我注意到,随着缓存的增长,clearcache方法的执行变得非常耗时。有时,如果执行clearcache,然后切换到包含不同webview的不同活动,则该webview在几秒钟内不会加载,因为它仍在等待上一个clearcache操作完成。
更糟糕的是,在清除了缓存之后,对clearcache的后续调用的执行时间似乎并没有减少。如果对clearcache的调用需要3秒才能完成,然后我立即第二次调用clearcache,那么我希望对clearcache的第二次调用几乎立即完成。但这并不是我正在经历的;我正在经历第二次调用clearcache仍然需要大约3秒。
还有人经历过吗?有什么方法可以提高性能吗?等待2-3秒(从本地文件系统)加载webview是很可怕的。
编辑:
这是我实际清除缓存的最佳选择。它或多或少起作用,但它有点剥落,我对它不是百分之百的满意(用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)尝试使用setAppCacheEnabledsetAppCacheMaxSize将缓存大小限制为非常小,较低的缓存大小将导致更快的清理。
EX:wv.getSettings().setAppCacheMaxSize(1);

2)如果不需要缓存数据,只需设置setCacheMode(WebSettings.LOAD_NO_CACHE);,这意味着
“不要使用缓存,从网络加载”,即使数据已缓存。
简而言之,只要忽略缓存的数据,android就会处理它。

3)您也可以尝试下面的代码,不进行缓存,
注意:这只适用于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);


4)每次页面加载完成时清除缓存。
类似于WebViewClient中的内容。
@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}


5)您可以尝试一次删除整个缓存数据库。
    context.deleteDatabase("webview.db");
    context.deleteDatabase("webviewCache.db");

希望这样能更快地得到结果。

关于android - Android Webview的ClearCache非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14392414/

10-12 02:39