Android Webview的ClearCache非常慢

cra*_*s84 2 android caching webview clear-cache

我在Android应用程序中使用WebViews,我需要阻止WebViews缓存.

不幸的是,似乎这个看似简单的目标几乎是不可能实现的.我使用的解决方案是在onPageFinished事件中执行webview.clearCache(true),以便每次加载页面时都清除缓存.有一些问题......

我注意到随着缓存的增长,执行clearCache方法变得非常耗时.有时,如果执行clearCache然后切换到包含不同webview的不同Activity,则该webview将不会加载几秒钟,因为它仍在等待先前的clearCache操作完成.

更糟糕的是,在缓存已经被清除之后,对clearCache的后续调用的执行时间似乎没有减少.如果对clearCache的调用需要3秒才能完成,然后我立即再次调用clearCache,那么我希望第二次调用clearCache几乎立即完成.但那不是我所经历的; 我遇到第二次调用clearCache仍然需要大约3秒钟.

还有其他人经历过这个吗?有什么方法可以提高性能吗?加载webview(从本地文件系统)等待2-3秒是非常可怕的.

编辑:

这是我实际清除缓存的最佳选择.它或多或少有效,但它有点片状,我不是百分之百满意(用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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Moi*_*med 7

1)尝试使用setAppCacheEnabledsetAppCacheMaxSize将缓存大小限制为非常小,较低的缓存大小将导致更快的清理.

例如: 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);
Run Code Online (Sandbox Code Playgroud)

要么

4)每当页面加载完成时,每次都清除缓存.像这样的东西WebViewClient.

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}
Run Code Online (Sandbox Code Playgroud)

要么

5)您可以尝试一次删除整个缓存的数据库.

    context.deleteDatabase("webview.db");
    context.deleteDatabase("webviewCache.db");
Run Code Online (Sandbox Code Playgroud)

这可能会给结果带来更快的结果,希望如此.