启用javascript时,Android Webview会降低Nexus设备的速度
Android Webview slows down Nexus devices when javascript is enabled
我在Nexus设备上遇到了这个奇怪的问题,比如Nexus 4、Galaxy Nexus和Nexus 7。我有一个类似浏览器的应用程序,有多个选项卡,每个选项卡都有一个Webview。
如果我在多个选项卡(2个或更多)中打开像Google.com这样的网站,网络视图不会点击。此外,网站加载速度也相当慢。以下是我的网络视图设置
private void doWebSettings(WebView webview) {
webview.setScrollbarFadingEnabled(true);
webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
// enable smooth transition for better performance during panning or
// zooming
if (currentSdk >= OS_3_0) {
webSettings.setEnableSmoothTransition(true);
}
// For Zooming out completely
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
try {
webSettings.setAllowContentAccess(false);
} catch (NoSuchMethodError e) {
e.printStackTrace();
}
String databasePath = this.getApplicationContext()
.getDir("database", Context.MODE_PRIVATE).getPath();
webSettings.setDatabasePath(databasePath);
webSettings.setGeolocationDatabasePath(this.getApplicationContext()
.getDir("geolocation", 0).getPath());
webSettings.setRenderPriority(RenderPriority.HIGH);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setDatabaseEnabled(true);
// Dont focus on any webview item by default
webSettings.setNeedInitialFocus(false);
if (!isTablet) {
webSettings
.setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");
}
}
如果我将Javascript enabled设置为"False",那么所有的Web视图都能顺利工作。这个问题在所有的nexus设备上都很明显,有时网络视图几分钟内都不会点击。此行为导致应用程序不可用。我推测某些Javascript正在消耗Webview的UI线程,这就是它陷入困境的原因。我在Eclipse中收到了一个关于setJavascriptEnabled的警告(true);由于"使用setJavaScriptEnabled可能会将XSS漏洞引入您的应用程序,请仔细查看。"我在互联网上搜索了此警告,但无法找到任何相关答案。此外,我还查看了一些与人们在Jellybean上面临Webview性能问题有关的帖子。我在这里错过了什么?
找到罪魁祸首。
webview.freeMemory()
我调用这个函数是为了在每次更改选项卡时释放内存。对此代码进行注释解决了问题。我不确定这背后的原因,但Webview会进入某种处理状态很长一段时间,并且不会点击UI。
相关文章:
- Wacom stu-430签名捕获速度太慢
- 如何在速度模板中获取LiferayPortlet实例id
- 我想放慢html中进程栏的速度
- Knockout绑定大量数据的速度较慢
- Wordpress:未捕获引用错误:未定义速度
- 即使光标位于屏幕边缘,也可以跟踪鼠标速度
- Css优化谷歌页面速度洞察
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 录制速度javascript
- Javascript图像数组预加载速度和从内存中删除
- 谷歌地图多边形减慢浏览器速度
- nodejs/ccurlhttp请求与postlerrest客户端相比速度较慢
- 从Three.js场景中删除许多对象的速度较慢
- 构建多个图表时,HighCharts加载数据的速度较慢
- jQuery.length()速度含义
- AMD应用程序在浏览器中的加载速度是否快于CommonJS应用程序
- 如何在不影响网站页面速度的情况下在我的网站上使用谷歌字体
- get_browser降低页面加载速度,任何其他选择
- 画布动画似乎不会以60帧/秒的速度运行
- 启用javascript时,Android Webview会降低Nexus设备的速度