的Android的WebView ClearCache很慢(Android Webview'

2019-07-18 09:21发布

我使用的Android应用中网页视图,我需要防止网页视图的缓存。

不幸的是,看起来这看似简单的目标几乎是不可能实现的。 我已经使出解决的办法是使缓存每个页面加载时间清除了onPageFinished事件而执行webview.clearCache(真)。 有一些问题...

我注意到,作为高速缓存增长就变得非常耗时的clearCache方法来执行。 有时,如果执行clearCache,然后切换到包含不同的WebView不同的活动,但网页流量不会因为它仍然在以前的clearCache操作完成等待加载几秒钟。

更糟糕的是后续调用clearCache的执行时间似乎并不之后缓存已被清除,以减少。 如果调用clearCache需要3秒钟即可完成,然后我立即打电话给clearCache第二次,那么我会希望clearCache第二次调用几乎立即完成。 但是,这不是我经历; 我遇到那个对clearCache第二个电话仍然需要约3秒钟。

任何人都经历吗? 有没有什么办法来提高性能? 等待2-3秒为一个网页视图加载(从本地文件系统)是可怕的。

编辑:

这是我真正清除缓存最佳替代品。 它更多或更少的工作,但是这有点片状,我不喜欢它(写在单C#)100%:

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;
        }
    }
}

Answer 1:

1)尝试使用setAppCacheEnabled和setAppCacheMaxSize限制缓存大小非常小,更低的高速缓存大小将导致更快的清理。

实施例: 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");

这可能给快一点的结果,希望如此。



Answer 2:

当你要下一个活动完成之前的活动。 所以,你可以自由通过这些活动占用的所有内存。 希望这可以帮助。



文章来源: Android Webview's ClearCache is very slow