2010-08-26 6 views
5

Mi chiedo come fa la webview a caricare un URL particolare. Crea un nuovo thread o carica l'URL nello stesso thread, cioè il thread dell'interfaccia utente? La ragione per cui sto chiedendo questo è che sto affrontando qualche strano problema di wakeup lock quando lancio un'attività da Attività corrente (nel metodo onCreate di Activity corrente) che crea una WebView nel suo metodo onCreate e carica un URL usando il metodo loadUrl. Così, quando ho finito con questa attività e torno alla Attività che ha avviato questo viene riavviato perché il tempo di blocco della sveglia è scaduto.
L'ho cercato su google e ho scoperto che se il metodo onCreate di un'attività richiede troppo tempo, potrebbe verificarsi questo tipo di problema. Qualcuno di voi ha dovuto affrontare questo tipo di problema che riguarda una WebView? Qualsiasi tipo di aiuto sarebbe molto apprezzato.
Ecco un esempio di codice. Il metodo loadUrl di WebView viene eseguito sul thread dell'interfaccia utente?

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

Ciao, ho usato WebViews (e loadUrl) su onCreate e non ho mai affrontato alcun problema (nemmeno l'analisi XML nello stesso onCreate). Che altro stai facendo nel tuo onCreate? Stai lanciando l'attività come peer o come attività per bambini? –

+0

quindi startActivityForResult crea un'attività figlio? se lo fa allora sì sto lanciando un'attività da bambino. – bhups

+0

Ho aggiunto un po 'di codice di esempio. – bhups

risposta

3

Il metodo loadUrl in WebView utilizza il meccanismo Handler che verrà eseguito nel thread dell'interfaccia utente. È necessario interrompere il caricamento dei dati chiamando webView.stopLoading() quando l'attività è in pausa/interrotta.

+0

Potrebbe essere questo il motivo per cui a volte la webview sembra mandare in crash la mia app senza messaggi di errore, quando si chiama loadUrl da un'altra classe? – NoBugs

+1

come eseguirlo su un thread diverso dieci perché quando lo si inserisce all'interno del proprio thread fallisce dicendo che non può essere eseguito su un thread diverso – jonney

Problemi correlati