2012-10-14 17 views
5

मैं एक WebView जो मैं AsyncTask.doInBackground में loadUrl साथ प्रारंभ की है। मैं इसे नीचे की तरह प्रारंभ:विजेट पोस्ट() बनाम हैंडलर पोस्ट() के बीच क्या अंतर है?

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

AsyncTask(), समस्या यह है कि समय वेबपेज के सबसे लोड नहीं हो रहा है मैं सफेद स्क्रीन देख Activity.onCreate में पिछले के रूप में क्रियान्वित किया जाता है। यदि मैं वेबव्यू को हैंडलर से बदलता हूं तो सब ठीक है। मुझे यहां क्या समझ नहीं आ रहा है?

उत्तर

8

यदि आप इसे यूआई थ्रेड पर चलाने की जरूरत है तो doInBackground() में ऐसा क्यों कर रहे हैं?

Hander.post() और View.post() के बीच अंतर यह है कि Handler अपने कोड धागा Handler उदाहरण पर बनाया गया था पर (जो जरूरी यूआई धागा नहीं है) है, जबकि View हमेशा यूआई धागा पर चला जाएगा चलेंगे है (विचारों क्योंकि इसके लिए बाध्य हैं)।

+0

loadUrl कॉल करने से पहले मैं सर्वर से इस url प्राप्त करने की जरूरत है। मुझे पता है कि कुछ और कोड जटिलता शुरू करके मैं इसे PostExecute पर कर सकता हूं। मुझे लगता है कि पूरी समस्या View.post() के लिए क्या दस्तावेज़ कहती है उससे संबंधित है: "यह विधि केवल यूआई थ्रेड के बाहर से ही लागू की जा सकती है जब यह दृश्य विंडो से जुड़ा होता है।", लेकिन मैं नहीं देखता यह मेरे मामले में कैसे हो सकता है। – marcinj

+0

अपने दृश्य जुड़े होते हैं के बारे में सुनिश्चित नहीं हैं, लेकिन आप निश्चित रूप से 'onPostExecute से बुला किया जाना चाहिए()'। जोड़ा गया जटिलता यूआरएल की सूची लौट रही है या उन्हें एक क्षेत्र में सहेज रही है। इसके अतिरिक्त, आप इसे 'ऑनस्टार्ट()' से कॉल करना चाहते हैं जहां दृश्य निर्माण को समाप्त होने की गारंटी है। –

+0

धन्यवाद, मैंपोस्टएक्सक्यूट पर उपयोग करूंगा – marcinj

संबंधित मुद्दे