У меня возникла эта странная проблема на устройствах Nexus, таких как Nexus 4, Galaxy Nexus и Nexus 7. У меня есть браузерное приложение с несколькими вкладками, каждая из которых имеет веб-просмотр.
Если я открою сайт, например Google.com, на нескольких вкладках (2 или более), веб-просмотры не будут получать клики. Также сайты загружаются довольно медленно. Ниже приведены мои настройки веб-просмотра.
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 значение «False», все веб-просмотры будут работать без сбоев. Эта проблема заметно наблюдается на всех устройствах Nexus, иногда веб-просмотры не принимают клики в течение нескольких минут. Такое поведение делает приложение непригодным для использования. Я предполагаю, что какой-то Javascript использует поток пользовательского интерфейса для веб-просмотра, и это причина его зависания. Я получаю предупреждение в Eclipse для setJavascriptEnabled(true); поскольку «Использование setJavaScriptEnabled может привести к XSS-уязвимостям в вашем приложении, внимательно изучите». Я искал это предупреждение в Интернете, но не нашел подходящего ответа. Также я проверил некоторые сообщения, связанные с людьми, столкнувшимися с проблемами производительности Webview на Jellybean. Что мне здесь не хватает?