Android Webview loadUrl no funciona cuando viene de un hilo de trabajo

Estoy desarrollando una aplicación que contiene una vista web. Algunas veces durante la aplicación hace una llamada a Webview loadUrl.

A veces la llamada procede directamente de un evento en el subproceso de interfaz de usuario y otras veces procede de un evento en un subproceso de trabajo de fondo. Cuando se origina del hilo de fondo Hago una llamada a runOnUIThead () para asegurar que la llamada real a loadURL ocurre en el subproceso de UI.

Lo que estoy experimentando es que loadUrl () funciona bien cuando se origina desde el subproceso de interfaz de usuario, sin embargo, no funciona cuando procede de un subproceso de trabajo (aunque la llamada real a loadUrl pasa a través de runnithread).

Después de establecer un punto de interrupción, puedo ver que en ambas instancias loadUrl () está siendo llamado en el subproceso de interfaz de usuario. Sin embargo, funciona en un caso, pero no en el otro.

Actualmente estoy examinando el código fuente de Android Webview para ver si puedo rastrear por qué a veces funciona y, a veces, no. Si alguien puede arrojar alguna luz sobre el asunto que sería muy apreciado.

— ACTUALIZACIÓN —

He intentado algunas sugerencias de esta publicación aquí: WebView loadUrl sólo funciona una vez

Principalmente haciendo lo siguiente antes de llamar a loadUrl:

webView.clearCache(true); webView.loadUrl("Url"); 

Y:

 webView.clearCache(true); webView.clearView(); webView.reload(); webView.loadUrl("about:blank"); webView.loadUrl("Url"); 

Desafortunadamente ninguno de ellos trabaja.

One Solution collect form web for “Android Webview loadUrl no funciona cuando viene de un hilo de trabajo”

En general, no es seguro crear vista fuera del hilo principal.

En su caso particular, esto no está permitido, ya que WebView crea Handler () en su constructor para la comunicación con el subproceso de la interfaz de usuario. Pero como el constructor predeterminado de Handler se conecta al thread actual y el subproceso actual no tiene Looper en ejecución, obtendrá esta excepción.

Usted podría pensar que la creación de un hilo de looper (que debe estar viva, por lo menos, tanto como WebView) puede ayudar, pero esto es realmente un camino arriesgado. Y no lo recomendaría.

Usted debe pegarse con la creación de WebViews en el hilo principal. Todos los controles suelen ser optimizados para la construcción rápida, ya que casi siempre se crean en el hilo de interfaz de usuario.

O Puedes llamar a webview de esta manera

 runOnUiThread(new Runnable() { @Override public void run() { // your webview method } }); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.