Mis android webviews
son lentos. Esto está en todo, desde teléfonos hasta 3.0+
tabletas con especificaciones más que adecuadas
Sé que se supone que las vistas web son "limitadas", pero veo aplicaciones web hechas con brecha telefónica que deben estar usando todo tipo de CSS3
y JQuery
hechicería, funcionan bien y rápido
así que me falta algo, ¿hay algún tipo de myWebview.SPEEDHACK(1)
eso que pueda usar para acelerar las cosas?
Además, a veces el contenido de mi webview simplemente no se carga, en lugar de cargar lentamente, simplemente no se carga. El activo con el que estoy probando se almacena localmente, sin errores.
Respuestas:
Depende de la aplicación web que se esté cargando. Pruebe algunos de los siguientes enfoques:
Establezca una mayor prioridad de procesamiento (en desuso de API 18+):
Activar / desactivar la aceleración de hardware:
Deshabilite el caché (si tiene problemas con su contenido):
fuente
Agregar esto
android:hardwareAccelerated="true"
en el manifiesto fue lo único que mejoró significativamente el rendimiento para míMás información aquí: http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel
fuente
android:hardwareAccelerated="true"
CSS, las animaciones 3D tuvieron largas demoras antes de comenzar, el desplazamiento de DIV dentro de otros DIV desplazables no funcionó, y la aplicación era más inestable.La solución para nosotros fue lo contrario. Deshabilitamos la aceleración de hardware solo en WebView (en lugar de en toda la aplicación en el manifiesto) usando este código:
Las animaciones CSS3 son más suaves ahora. Estamos usando Android 4.0.
Más información aquí: https://code.google.com/p/android/issues/detail?id=17352
fuente
WebView not displayed because it is too large to fit into a software layer (or drawing cache), needs 11534400 bytes, only 8294400 available
Creo que lo siguiente funciona mejor:
Android 19 tiene un motor Chromium para WebView. Supongo que funciona mejor con la aceleración de hardware.
fuente
Estaba teniendo este mismo problema y tuve que resolverlo. Probé estas soluciones, pero al final el rendimiento, al menos para el desplazamiento, no mejoró en absoluto. Así que aquí el trabajo que realicé y la explicación de por qué funcionó para mí.
Si tuvo la oportunidad de explorar los eventos de arrastre, solo un poco, creando una clase "MiWebView", sobrescribiendo el método "onTouchEvent" y al menos imprimió la hora en que ocurre cada evento de arrastre, verá que están separados a tiempo para (hasta) 9ms de distancia. Ese es un tiempo muy corto entre eventos.
Eche un vistazo al código fuente de WebView y solo vea la función onTouchEvent. Es simplemente imposible que el procesador lo maneje en menos de 9 ms (¡Sigue soñando!). Es por eso que constantemente se ve el mensaje "Perder un arrastre mientras esperamos la respuesta de WebCore para el aterrizaje". mensaje. El código simplemente no se puede manejar a tiempo.
¿Como arreglarlo? Primero, no puede volver a escribir el código onTouchEvent para mejorarlo, es demasiado. Pero, puede "burlarse de él" para limitar la tasa de eventos para arrastrar movimientos, digamos a 40 ms o 50 ms. (Esto depende del procesador).
Todos los eventos táctiles son así: ACTION_DOWN -> ACTION_MOVE ...... ACTION_MOVE -> ACTION_UP. Por lo tanto, debemos mantener los movimientos ABAJO y ARRIBA y filtrar la tasa de MOVIMIENTO (estos son los malos).
Y aquí hay una forma de hacerlo (puede agregar más tipos de eventos, como tocar dos dedos, todo lo que me interesa aquí es el desplazamiento con un solo dedo).
Por supuesto, use esta clase en lugar de WebView y verá la diferencia al desplazarse.
Este es solo un enfoque para una solución, pero aún no está completamente implementado para todos los casos de retraso debido al toque de la pantalla cuando se usa WebView. Sin embargo, es la mejor solución que encontré, al menos para mis necesidades específicas.
fuente
Intenté todas las propuestas para solucionar el problema de rendimiento de renderizado en mi aplicación phonegap. Pero nada realmente funcionó.
Finalmente, después de un día entero de búsqueda, lo logré. Lo configuro dentro de la etiqueta (no la etiqueta) de mi AndroidManifest
Ahora la aplicación se comporta de la misma manera rápida que mi navegador web. Parece que, si la aceleración de hardware no es siempre la mejor característica ...
El problema detallado que tuve: https://stackoverflow.com/a/24467920/3595386
fuente
Ninguna de esas respuestas no fue útil para mí.
Finalmente encontré razón y solución. La razón fue una gran cantidad de filtros CSS3 (filter, -webkit-filter).
Solución
He agregado la detección de WebView en el script de la página web para agregar la clase "baja calidad" al cuerpo HTML. Por cierto. Puede rastrear fácilmente WebView configurando el agente de usuario en la configuración de WebView. Luego creé una nueva regla CSS
fuente
Si solo hay unos pocos componentes de su vista web que son lentos o lentos, intente agregar esto a los elementos css:
Este ha sido el único speedhack que realmente tuvo un efecto en mi webview. ¡Pero tenga cuidado de no usarlo en exceso! (puedes leer más sobre el hack en este artículo ).
fuente
will-change: transform
.Prueba esto:
fuente
Si está vinculado al
onclick
evento, puede ser lento en las pantallas táctiles.Para hacerlo más rápido, utilizo fastclick , que utiliza los eventos táctiles mucho más rápidos para imitar el evento de clic.
fuente
$('#').on('touchstart', function() {...});
en lugar de onclick