2012-10-14 8 views
5

Ho una visualizzazione Web che inizializzo con loadUrl in AsyncTask.doInBackground. Mi inizializzare come di seguito:Qual è la differenza tra widget post() e gestore()?

webView.post(new Runnable() {    
    @Override 
    public void run() { 
     webView.loadUrl(authURL);     
    } 
}); 

AsyncTask viene eseguita come ultimo in Activity.onCreate(), il problema è che la maggior parte della pagina web tempo non viene caricato, vedo schermo bianco. Se sostituisco webView con il gestore, tutto va bene. Cosa mi manca qui?

risposta

8

Perché stai facendo questo in doInBackground() se è necessario eseguire comunque sul thread dell'interfaccia utente?

La differenza tra Hander.post() e View.post() è che Handler verrà eseguito il codice sul filo l'istanza Handler è stato creato il (che non è necessariamente il thread UI), mentre View sarà sempre eseguito sul thread UI (perché viste sono legati ad esso).

+0

Prima di chiamare loadUrl ho bisogno di recuperare questo URL dal server. So che introducendo un po 'più di complessità del codice, potrei farlo in onPostExecute. Sto iniziando a pensare che l'intero problema sia legato a ciò che dice doc per View.post(): "Questo metodo può essere richiamato dall'esterno del thread dell'interfaccia utente solo quando questa vista è collegata a una finestra.", Ma io non vedo come questo può accadere nel mio caso. – marcinj

+0

Non sei sicuro di come siano collegate le tue viste, ma dovresti sicuramente chiamarlo da 'onPostExecute()'. La complessità aggiunta restituirà un elenco di URL o li salverà in un campo. Inoltre, potresti voler chiamare questo da 'onStart()' dove la creazione della vista è stata completata. –

+0

grazie, userò onPostExecute – marcinj

Problemi correlati