HTC One X – Webview se convierte en blanco / vacío después del toque

Tengo una aplicación de Android que tiene cuadro de texto para la búsqueda, algunos botones, webviews (1 visibles 2 invisibles) y un adview admob. La aplicación sólo busca en algunos sitios especiales y funciona muy bien en el emulador, los dispositivos Samsung Galaxy. Pero tengo problemas con HTC One X (no sé sobre otros modelos de HTC).

El problema es que al hacer clic en un botón de búsqueda, la vista web carga la página. A continuación, "a veces" cuando intenta tocar incluso para desplazarse, la vista web simplemente vuelve al área totalmente blanca con barras de desplazamiento. Esto ocurre especialmente después de la actualización de anuncios. Incluso a veces el fondo del anuncio y el área de texto se convierten totalmente en blanco, por lo que no son legibles. En el anuncio sólo flecha azul y las imágenes de llamada de teléfono azul permanecer visibles!

¿Alguien tiene problemas como este, y cualquier solución? gracias por adelantado.

Aquí está mi diseño xml:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/layoutDashboard" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:background="@drawable/border_shape" android:orientation="vertical" android:paddingTop="1sp" > <EditText android:id="@+id/editxtKeyword" android:layout_width="fill_parent" android:layout_height="43dp" android:layout_marginLeft="1dp" android:layout_marginRight="1dp" android:layout_marginTop="2dp" android:ems="10" android:hint="@string/editxtKeyword_hint" android:singleLine="true" > </EditText> <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_gravity="center_vertical" android:layout_weight="0.30" android:paddingBottom="2dp" android:paddingLeft="1dp" android:scrollbars="none" > <LinearLayout android:id="@+id/layoutButtons" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center_vertical" android:layout_marginTop="0dp" android:layout_marginBottom="1dp" android:layout_marginLeft="1dp" android:layout_marginRight="1dp" android:orientation="horizontal" > < <Button android:id="@+id/btnAk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="1dp" android:background="@drawable/custom_button_shape" android:text="asd" /> <Button android:id="@+id/btnCm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="1dp" android:background="@drawable/custom_button_shape" android:text="csm" /> </LinearLayout> </HorizontalScrollView> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/webV" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/linlaylay1" android:visibility="visible" /> <WebView android:id="@+id/webVAnalytics" android:layout_width="1dp" android:layout_height="0dp" android:visibility="invisible" /> <WebView android:id="@+id/WebVSahibinden" android:layout_width="1dp" android:layout_height="0dp" android:visibility="invisible" /> <LinearLayout android:id="@+id/linlaylay1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_margin="0dp" android:orientation="vertical" android:padding="0dp" > <com.google.ads.AdView android:id="@+id/adViewSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" ads:adSize="BANNER" ads:adUnitId="a123123" ads:loadAdOnCreate="true" ads:testDevices="TEST_EMULATOR" /> </LinearLayout> </RelativeLayout> </LinearLayout> <LinearLayout android:id="@+id/layoutProgress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" android:layout_marginBottom="50dp" android:layout_marginTop="5dp" android:background="@drawable/progress_shape" android:padding="2dp" android:visibility="invisible" > <TextView android:id="@+id/lblLoading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" android:text="@string/msg_loading" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" /> <ImageButton android:contentDescription="@string/dialog_cancel" android:id="@+id/btnStop" android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/stop" /> </LinearLayout> </FrameLayout> 

Existen muchos problemas al mostrar vistas aceleradas de hardware encima de cada uno. Volvería a trabajar su diseño para no superponer las vistas web o vistas de desplazamiento, o desactivar la aceleración de hardware.

Un error conocido

Puede desactivar la aceleración de hardware en su WebView, pero asegúrese de hacerlo de una manera que no rompa los dispositivos antiguos:

 if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB){ //mWebView is some WebView mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } 

Advertencias

  • Los videos no se reproducen en el navegador
  • El desplazamiento no será casi tan suave

Esto se arregla en Jelly Bean según el error pero no he podido verificarlo personalmente.

He visto este problema con vistas únicas en teléfonos HTC. Uno de los comentarios en este subproceso hace algunas sugerencias para ayudar a optimizar el rendimiento de WebView. El error es sobre transformaciones en 3D, pero he encontrado que las técnicas del comentario son útiles para WebViews en general.

Esta presentación en Google I / O 2012 también proporciona una buena información sobre el tema de WebViews, en general.

Ambos sugieren que el contenido dinámico se coloque en una "capa". Esto significa asignar esta regla CSS al elemento:

  -webkit-transform: translate3d(0, 0, 0); 

Al aplicar esta regla, Android "le dice al navegador que precompile la capa en su propia textura para que pueda ser animada más tarde para (casi) libre" Este comportamiento no es gratis – puede consumir más memoria por lo que lo aplicaría de manera juiciosa. La presentación adjunta hace un buen trabajo explicando por qué.

En mi caso, pude evitar una "pantalla blanca" al aplicar esta regla a un DIV que envuelve toda la página. A veces, la página se vuelve blanca durante un segundo y luego se procesa el contenido. No he visto la página "blanca" persistir para siempre como lo hice antes de aplicar esta técnica. No vi un consumo de memoria fuera de control. YMMV.

También sugiero que haga lo que pueda para simplificar su diseño. Más fácil decirlo que hacerlo, pero algunas buenas sugerencias se pueden encontrar en los documentos .

  • Appcache en Android Webview no descargar fuentes
  • Jellybean / ICS Método de publicación HTTP Android + WebView.RestoreState
  • Phonegap Android Internet no funciona
  • Android Talkback no lee caracteres utf-8 en la vista Web usando html
  • Ocultar / Mostrar la barra de herramientas cuando se desplaza el fragmento en las pestañas
  • ¿Cómo puedo tomar una captura de pantalla de una vista web, capturar la página completa?
  • ¿Cómo capturar esta excepción en la vista web de Android?
  • Entrada de archivo HTML en android webview (android 4.4, kitkat)
  • OnPageFinished () nunca llamado (webview)!
  • ¿Cómo implementar pull down refresh en android?
  • Vista web de Android, inicie la actividad ACTION_VIEW cuando la URL no pueda ser manejada por webview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.