documentacion developers android webview

developers - documentacion de android



Rendimiento de Android WebView (3)

En mi aplicación, estoy cargando una lista de direcciones URL externas en webview y permito que el usuario las revise. Las vistas web se cargan en un flipper de vista. Me parece que el rendimiento es realmente malo en url de carga webview. He intentado todo, desde usar el diseño del marco hasta limitar el número de webviews para cargar. Aún así el rendimiento no es satisfactorio.

¿Cómo optimizo el rendimiento de webview? Esto debería ser un uso común. ¿Me estoy perdiendo algo obvio?

Mis ajustes de vista web son -

webView.setInitialScale(WEBVIEW_SCALE); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(false); webView.setWebViewClient(new MyWebViewClient()); webView.setOnTouchListener( new OnTouchListener());


Creo que lo siguiente funciona mejor:

if (Build.VERSION.SDK_INT >= 19) { webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); } else { webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); }

Android 19 tiene un motor Chromium para WebView. Supongo que funciona mejor con la aceleración de hardware.

Para obtener más información sobre Android 4.4 KitKat, el navegador y Chrome WebView


Esto ya se ha discutido aquí: Mejorar el rendimiento de webView (debería ser el mismo que el navegador web nativo)

Me encontré con un problema similar, y después de una gran depuración noté que el navegador nativo y el navegador WebView parecen estar usando diferentes cachés.

Este código se puede usar para deshabilitar el caché de WebView y para que WebView sea mucho más rápido para mí (aunque a costa de no almacenar en caché). Tenga en cuenta que utiliza API privadas, por lo que al usarlo, se arriesga a que el código se rompa en futuras versiones:

try { Method m = CacheManager.class.getDeclaredMethod("setCacheDisabled", boolean.class); m.setAccessible(true); m.invoke(null, true); } catch (Throwable e) { Log.i("myapp","Reflection failed", e); }


Prueba esto:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); } else { webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); }