का उपयोग करना है आपके यूआईटीएचड आपके आवेदन के लिए निष्पादन का मुख्य धागा है। यह वह जगह है जहां आपका अधिकांश एप्लिकेशन कोड चलाया जाता है। इस थ्रेड में आपके सभी एप्लिकेशन घटक (गतिविधियां, सेवाएं, सामग्री प्रदाता, ब्रॉडकास्ट रिसीवर) बनाए गए हैं, और इन घटकों को किसी भी सिस्टम कॉल को इस थ्रेड में किया जाता है।
उदाहरण के लिए, मान लीजिए कि आपका एप्लिकेशन एक एकल गतिविधि वर्ग है। फिर जीवन भर के सभी तरीकों और आपके इवेंट हैंडलिंग कोड का अधिकांश हिस्सा इस यूआईटीएचड में चलाया जाता है। ये onCreate
, , onDestroy
, onClick
इत्यादि जैसी विधियां हैं। इसके अतिरिक्त, यह वह जगह है जहां यूआई के सभी अपडेट किए जाते हैं। यूआई थ्रेड पर होने वाली यूआई को अपडेट या बदलने के लिए जो भी कुछ भी हो रहा है।
For more info on your application's Processes and Threads click here.
जब आप स्पष्ट रूप से पृष्ठभूमि में काम करने के लिए एक नया धागा अंडे, इस कोड UIThread पर नहीं चल रहा है। तो क्या होता है यदि इस पृष्ठभूमि धागे को यूआई को बदलने वाले कुछ ऐसा करने की ज़रूरत है? यह runOnUiThread
के लिए है। असल में आप हैंडलर का उपयोग करना चाहते हैं (इस पर अधिक जानकारी के लिए नीचे दिए गए लिंक को देखें)। यह इन पृष्ठभूमि धागे को कोड को निष्पादित करने की क्षमता प्रदान करता है जो यूआई को संशोधित कर सकता है। वे यूआई-संशोधित कोड को एक रननेबल ऑब्जेक्ट में डालकर इसे runOnUi थ्रेड विधि में पास करके करते हैं।
For more info on spawning worker threads and updating the UI from them click here
मैं व्यक्तिगत रूप से सिर्फ अपने इंस्ट्रूमेंटेशन टेस्ट मैचों में runOnUiThread
विधि का उपयोग करें। चूंकि परीक्षण कोड UIThread में निष्पादित नहीं होता है, इसलिए आपको UI को संशोधित करने वाले कोड को चलाने के लिए इस विधि का उपयोग करने की आवश्यकता है। इसलिए, मैं इसे अपने आवेदन में क्लिक और कुंजी घटनाओं को इंजेक्ट करने के लिए उपयोग करता हूं। फिर मैं यह सुनिश्चित करने के लिए आवेदन की स्थिति की जांच कर सकता हूं कि सही चीजें हुईं।
For more info on testing and running code on the UIThread click here
ग्रेट स्पष्टीकरण, विशेष रूप से ऐप मौलिक सिद्धांतों के लिए लिंक यह मेरे जैसे सभी शुरुआती लोगों के लिए पढ़ना चाहिए :) –
क्या आप ज्यादातर मामलों में 'runOnUiThread' के बजाय' AsyncTask' का उपयोग नहीं करना चाहिए? – JDJ
@ जेडीजे 2 तकनीकों के अलग-अलग उद्देश्यों हैं: 'AsyncTask' आपको पृष्ठभूमि में मुख्य धागे को बंद कर देगा; 'runOnUiThread()' आपको पृष्ठभूमि से मुख्य धागे पर ले जाएगा। तो यह निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। –