gpt4 book ai didi

Android Webview 的 ClearCache 很慢

转载 作者:太空狗 更新时间:2023-10-29 15:54:56 25 4
gpt4 key购买 nike

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

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

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

更糟糕的是,在清除缓存后,后续调用 clearCache 的执行时间似乎并没有减少。如果对 clearCache 的调用需要 3 秒才能完成,然后我立即第二次调用 clearCache,那么我希望对 clearCache 的第二次调用几乎立即完成。但这不是我正在经历的;我发现第二次调用 clearCache 仍然需要大约 3 秒。

有没有人遇到过这种情况?有什么方法可以提高性能吗?等待 2-3 秒来加载 webview(从本地文件系统)是很糟糕的。

编辑:

这是我实际清除缓存的最佳替代方法。它或多或少有效,但有点不稳定,我不是 100% 满意它(用 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将缓存大小限制在很小的范围内,较小的缓存大小会导致更快的清理。

例如: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 Webview 的 ClearCache 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com