2010-08-26 38 views
5

Me pregunto cómo carga webview una URL en particular. ¿Crea un nuevo hilo o carga la URL en el mismo hilo, es decir, el hilo de UI? La razón por la que estoy preguntando esto es que estoy enfrentando un extraño problema de bloqueo de activación cuando inicio una Actividad de la Actividad actual (en el método onCreate de la Actividad actual) que crea una WebView en su método onCreate y carga una URL usando el método loadUrl. Así que cuando termine con esta actividad y regrese a la Actividad que se inició esto se reinicia porque el tiempo de espera de bloqueo ha expirado.
Lo busqué en Google y descubrí que si el método onCreate de una actividad lleva demasiado tiempo, podría ocurrir este tipo de problema. ¿Alguno de ustedes ha enfrentado este tipo de problema relacionado con un WebView? Cualquier tipo de ayuda sería muy apreciada.
Aquí hay un código de muestra. ¿El método loadUrl de WebView se ejecuta en el subproceso de interfaz de usuario?

Activity A: 
class ActivityA { 
    onCreate(){ 
    initializeSomething(); 
    registerSomeEvents(); 
    startSomething(); 
    } 
    onSomeListener(){ 
    if(someFlag) { 
     startActivity(ActivityB); 
     //this will pause the current activity i.e. ActivityA 
    } 
    } 
} 
Activity B: 
class ActivityB(){ 
    onCreate() { 
    if(someFlag){ //someFlag is coming in intent 
    helper = createHelperX(); 
    } else { 
    helper = createHelperY(); 
    } 
    helper.pleaseHelp(); //this does the rest of thing using activity instance 
}

HelperX:

class HelperX(){ createHelper() { //setup layout views etc, no WebView here //and wait for user interaction //register some events } onSomeEvent(){ if(someOtherFlag) { startActivityForResult(ActivityB); //and pass some flag, now this flag will trigger HelperY } }

HelperY: class HelperY(){ createHelper() { //setup views etc , this contains a WebView and calls loadURL. } }

+0

Hola, he usado WebViews (y loadUrl) en onCreate y nunca tuve problemas (incluso el análisis XML en el mismo onCreate). ¿Qué más estás haciendo en tu onCreate? ¿Estás iniciando la actividad como un compañero o como una actividad infantil? –

+0

entonces startActivityForResult crea una actividad infantil? si lo hace, entonces sí, estoy lanzando una actividad infantil. – bhups

+0

He agregado un código de muestra. – bhups

Respuesta

3

El método loadUrl en WebView usa el mecanismo Handler, es decir, se ejecutará en el subproceso UI. Debe detener la carga de datos llamando a webView.stopLoading() cuando la actividad está pausada/detenida.

+0

¿Podría ser esta la razón por la cual a veces la vista web parece bloquearse en mi aplicación sin ningún mensaje de error cuando se llama a loadUrl desde otra clase? – NoBugs

+1

¿Cómo lo haces funcionar en un hilo diferente diez porque cuando lo pones dentro de su propio hilo falla diciendo que no se puede ejecutar en un hilo diferente – jonney

Cuestiones relacionadas