2012-10-14 14 views
5

AsyncTask.doInBackground'da loadUrl ile başlattığım bir WebView var. Aşağıda gibi başlatılamıyor:Widget post() ile handler post() arasındaki fark nedir?

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

AsyncTask(), sorun ben beyaz ekranı göreceksiniz, zaman web sayfasının en yüklü almaz olmasıdır Activity.onCreate son olarak yürütülür. WebView öğesini işleyici ile değiştirirsem, hepsi tamam. Burada neyi özlüyorum?

cevap

8

Neden bu kullanıcı arabiriminde çalışması gerekiyorsa bunu neden doInBackground() yapıyorsunuz?

Hander.post() ve View.post() arasındaki fark View hep UI iş parçacığı üzerinde çalıştırmak ise Handler, (UI iş parçacığı olması gerekmez olan) Handler örneği üzerinde oluşturulan iş parçacığı üzerinde kodunuzu çalışacak olmasıdır

(görünümler nedeniyle ona bağlı).

+0

loadUrl çağrılmadan önce bu URL'yi sunucudan almam gerekir. Daha fazla kod karmaşıklığı tanıtarak bunu onPostExecute içinde yapabildiğimi biliyorum. Tüm sorunun, doc'ların View.post() için söylediği şeyle ilgili olduğunu düşünmeye başladım: "Bu yöntem, yalnızca bir Pencere'ye eklendiğinde UI iş parçacığı içinden çağrılabilir." Benim durumumda bu nasıl olabilir. – marcinj

+0

Görünümlerinizin nasıl ekleneceğinden emin değilsiniz, ancak kesinlikle bunu onPostExecute() 'den çağırmalısınız. Eklenen karmaşıklık, bir URL listesi döndürecek veya bunları bir alana kaydedecektir. Ek olarak, bunu, görünüm oluşturma işleminin bitmiş olduğu garanti edilen 'onStart()' dan aramak isteyebilirsiniz. –

+0

teşekkürler, onPostExecute kullanacağım – marcinj