在我的应用程序中,我正在加载webview中的外部URL列表,并允许用户翻阅它们.Web视图被加载到视图翻录器上.我发现webview加载网址的性能非常糟糕.我已经尝试了从使用框架布局到限制要加载的webview数量的所有内容.表现仍不尽如人意.
如何优化webview的性能?这应该是一种常见的用法.我错过了一些明显的东西.
我的Webview设置是 -
webView.setInitialScale(WEBVIEW_SCALE);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.setWebViewClient(new MyWebViewClient());
webView.setOnTouchListener( new OnTouchListener());
Run Code Online (Sandbox Code Playgroud) 我在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)