Android UiThread (UI थ्रेड) क्या है


81

क्या कोई मुझे समझा सकता है कि वास्तव में UI थ्रेड क्या है? Developer.android.com पर यह runOnUiThread फ़ंक्शन के बारे में कहता है

सार्वजनिक अंतिम शून्य runOnUiThread (चलाने योग्य कार्रवाई)

चूंकि: API स्तर 1 UI थ्रेड पर निर्दिष्ट कार्रवाई चलाता है। यदि वर्तमान थ्रेड UI थ्रेड है, तो कार्रवाई तुरंत निष्पादित की जाती है। यदि वर्तमान थ्रेड UI थ्रेड नहीं है, तो कार्रवाई UI थ्रेड की ईवेंट कतार में पोस्ट की जाती है।

क्या यूआई थ्रेड का मतलब है कि यह हर बार चलाया जाएगा क्योंकि गतिविधि को पृष्ठभूमि पर कुछ यूआई गतिविधि जैसे आने वाली कॉल या स्क्रीन डिमिंग आदि द्वारा धकेल दिया जाता है? यदि नहीं, तो वास्तव में UI थ्रेड में क्या शामिल है?

धन्यवाद

जवाबों:


144

यूआईट्रेड आपके आवेदन के लिए निष्पादन का मुख्य धागा है। यह वह जगह है जहाँ आपका अधिकांश एप्लिकेशन कोड चलाया जाता है। आपके सभी एप्लिकेशन कंपोनेंट्स (एक्टिविटीज़, सर्विसेज़, कंटेंटप्रोवाइडर्स, ब्रॉडकास्टवर्स) इस थ्रेड में बनाए गए हैं, और उन कंपोनेंट्स को कोई भी सिस्टम कॉल इस थ्रेड में की जाती है।

उदाहरण के लिए, मान लें कि आपका आवेदन एकल गतिविधि वर्ग है। फिर इस UIThread में सभी जीवनचक्र विधियों और आपके अधिकांश ईवेंट हैंडलिंग कोड को चलाया जाता है। इस तरह के तरीके हैं onCreate, onPause, onDestroy, onClick, आदि इसके अतिरिक्त, इस जहां यूआई के लिए अद्यतन के सभी किया जाता है। कुछ भी जो UI को अद्यतन करने या परिवर्तित करने का कारण बनता है वह UI थ्रेड पर घटित होता है।

अपने आवेदन की प्रक्रियाओं और थ्रेड्स के बारे में अधिक जानकारी के लिए यहां क्लिक करें।

जब आप पृष्ठभूमि में काम करने के लिए स्पष्ट रूप से एक नया धागा बनाते हैं, तो यह कोड UIThread पर नहीं चलाया जाता है। तो क्या होता है अगर इस पृष्ठभूमि के धागे को यूआई को बदलने के लिए कुछ करने की ज़रूरत है? यह वही runOnUiThreadहै जिसके लिए है। वास्तव में आप एक हैंडलर का उपयोग करने वाले हैं (इस बारे में अधिक जानकारी के लिए नीचे दिया गया लिंक देखें)। यह इन पृष्ठभूमि थ्रेड को कोड निष्पादित करने की क्षमता प्रदान करता है जो UI को संशोधित कर सकते हैं। वे यूआई-मॉडिफाइंग कोड को रननेबल ऑब्जेक्ट में डालकर रनऑन यूआईट्र्रेड विधि से पास करते हैं।

वर्कर थ्रेडिंग के बारे में अधिक जानकारी के लिए और उनमें से यूआई को अपडेट करने के लिए यहां क्लिक करें

मैं व्यक्तिगत रूप से केवल runOnUiThreadअपने इंस्ट्रूमेंटेशन टेस्ट में विधि का उपयोग करता हूं। चूंकि परीक्षण कोड UIThread में निष्पादित नहीं होता है, इसलिए आपको UI को संशोधित करने वाले कोड को चलाने के लिए इस पद्धति का उपयोग करने की आवश्यकता है। इसलिए, मैं अपने एप्लिकेशन में क्लिक और प्रमुख घटनाओं को इंजेक्ट करने के लिए इसका उपयोग करता हूं। फिर मैं सही स्थिति में सुनिश्चित करने के लिए एप्लिकेशन की स्थिति की जांच कर सकता हूं।

UIThread पर परीक्षण और रनिंग कोड के बारे में अधिक जानकारी के लिए यहां क्लिक करें


3
महान व्याख्या, विशेष रूप से ऐप की बुनियादी बातों के लिए लिंक यह मेरे जैसे सभी शुरुआती के लिए पढ़ना चाहिए :)
जावा छात्र

1
क्या आपको ज्यादातर मामलों में AsyncTaskइसके बजाय उपयोग नहीं करना चाहिए runOnUiThread?
JDJ

5
@JDJ 2 तकनीकों के अलग-अलग उद्देश्य हैं: AsyncTaskआपको पृष्ठभूमि में मुख्य धागा बंद हो जाएगा; runOnUiThread()आपको पृष्ठभूमि से मुख्य धागा प्राप्त होगा। तो यह निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं।
रिचर्ड ले मेसियर

10

यदि आप एक अलग थ्रेड में ब्लॉकिंग कोड (जैसे Http-Request) निष्पादित करते हैं, तो AsyncTask का उपयोग करने पर विचार करें । इसका doInBackground-मेथोड एक अलग थ्रेड पर चलता है। AsyncTaskआपको तरीकों के साथ प्रदान करता है onProgressUpdateऔर onPostExecuteजो UI थ्रेड पर चलने की गारंटी देते हैं ।

यदि आपको GUI- प्रगति अपडेट (जैसे एक प्रगति पट्टी के माध्यम से) कॉल की आवश्यकता है publishProgress है doInBackground। यह बाद के कॉल की ओर जाता है onPublishProgressजिसकी UI थ्रेड पर चलने की गारंटी भी है ।

onPostExecuteस्वचालित रूप से doInBackgroundरिटर्न के बाद कहा जाता है।


5

सभी यूआई चित्र आदि एक अलग धागे में होते हैं। इसे यूआईथ्रेड कहा जाता है। यदि आप यूआई में कोई बदलाव करना चाहते हैं तो यूआईट्रेड के संदर्भ में सुनिश्चित करें कि यह अवश्य होता है। इसे करने का सबसे आसान तरीका इसका उपयोग करना हैrunOnUiThread


क्या आप एक गैर यूआई थ्रेड में विजेट डेटा संरचना (जैसे लेआउट को फुलाते हैं) तैयार कर सकते हैं और बाद में उन्हें यूआई थ्रेड में आकर्षित कर सकते हैं?
SMBiggs

कभी कोशिश नहीं की, लेकिन तकनीकी रूप से यह संभव होना चाहिए, क्योंकि फुलाव सिर्फ डेटा संरचना बनाता है। इसका हिस्सा जब यू अटैच होता है तो एक्टिविटी आदि होता है जब यू को इसे यूआईथ्रेड संदर्भ में करने की आवश्यकता होती है।
the100rabh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.