2010-11-02 24 views
16

En mi aplicación, estoy cargando una lista de URL externas en la vista web y le permite al usuario hojearlas. Webviews se cargan en un flipper de vista. Encuentro que el rendimiento es realmente malo en la URL de carga de webview. He intentado de todo, desde usar el diseño del marco hasta limitar el número de visitas web a cargar. Aún así, el rendimiento no es satisfactorio.Android WebView rendimiento

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

Mi configuración WEBVIEW son -

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

¿Seguro que no es la carga de los datos de Internet por el problema? – Falmarri

+0

No. Los datos están cargados. Pero lleva mucho tiempo. – Usha

+1

La carga de varias páginas a la vez es costosa, incluso cargar una sola página web es una operación costosa. Dejando de lado todo el procesamiento de cosas como imágenes, escalado del puerto de visualización, etc. También existen limitaciones en el rendimiento de muchas conexiones de socket concurrentes. Finalmente, supongo que si miras el registro verás una gran cantidad de GC thrash. No es realmente recomendable tener muchos WebView activos a la vez. Sin una descripción cuantitativa de "el rendimiento no es satisfactorio" o el teléfono en el que se está ejecutando, solo puedo adivinar que no hay mucho que pueda hacer para mejorarlo. – cistearns

Respuesta

1

Esto ya ha sido discutido aquí: Enhance webView performance (should be the same performance as native Web Browser)

me encontré con un problema similar, y después de algún dura corrección se dio cuenta de que el navegador navegador nativo y WebView parece estar usando diferentes cachés

Este código se puede utilizar para deshabilitar el caché WebView, y me hizo WebView mucho más rápido para mí (aunque a expensas de no almacenar en caché). Tenga en cuenta que que utiliza las API privadas, por lo que mediante su uso está arriesgando el código se rotura 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); 
} 
+0

¿Esto inhabilita el almacenamiento en caché para cada vista Web utilizada por la aplicación? ¿Habría alguna forma de desactivar el almacenamiento en caché solo para un WebView único? ¡Gracias! –

+0

Parece que mi pregunta puede ser respondida por el método WebSettings '.setCacheMode (WebSettings.LOAD_NO_CACHE);' –

+0

Aunque según esta pregunta, o no funciona, o solo omite la comprobación de caché, pero aún guarda en la caché. http: // stackoverflow.com/questions/5239954/webviews-load-no-cache-setting-still-saves-files-to-the-disk –

4

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); 
} 
2

Creo que los siguientes trabajos mejores :

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

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

Para obtener más información Android 4.4 KitKat, the browser and the Chrome WebView