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)
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);
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)
这可能会给结果带来更快的结果,希望如此.
| 归档时间: |
|
| 查看次数: |
6071 次 |
| 最近记录: |