यदि हम स्रोत कोड को देखते हैं, तो हम देखेंगे AsyncTask
और Handler
विशुद्ध रूप से जावा में लिखा है। (हालांकि कुछ अपवाद हैं, लेकिन यह एक महत्वपूर्ण बिंदु नहीं है)
तो वहाँ में कोई जादू नहीं है AsyncTask
या Handler
। ये कक्षाएं एक डेवलपर के रूप में हमारे जीवन को आसान बनाती हैं।
उदाहरण के लिए: यदि प्रोग्राम A कॉल विधि A (), मेथड A () प्रोग्राम A के साथ किसी भिन्न थ्रेड में चला सकता है। हम कोड का पालन करते हुए आसानी से सत्यापित कर सकते हैं:
Thread t = Thread.currentThread();
int id = t.getId();
हमें कुछ कार्यों के लिए नए थ्रेड का उपयोग क्यों करना चाहिए? आप इसके लिए google कर सकते हैं। कई कारण, उदाहरण के लिए: भारी, लंबे समय तक चलने वाले कार्यों को उठाना।
तो, के बीच मतभेद रहे हैं Thread
, AsyncTask
और Handler
?
AsyncTask
और Handler
जावा में लिखा है (आंतरिक रूप से वे एक का उपयोग करते हैं Thread
), इसलिए हम जो कुछ भी कर सकते हैं Handler
या AsyncTask
, हम Thread
भी एक का उपयोग करके प्राप्त कर सकते हैं।
क्या Handler
और AsyncTask
वास्तव में मदद कर सकता है ?
सबसे स्पष्ट कारण कॉलर थ्रेड और वर्कर थ्रेड के बीच संचार है। ( कॉलर थ्रेड : एक थ्रेड जो कुछ कार्य करने के लिए वर्कर थ्रेड को कॉल करता है। एक कॉलर थ्रेड के लिए यूआई थ्रेड होना आवश्यक नहीं है)। बेशक, हम अन्य तरीकों से दो थ्रेड्स के बीच संवाद कर सकते हैं, लेकिन थ्रेड सुरक्षा के कारण कई नुकसान (और खतरे) हैं।
इसलिए हमें उपयोग करना चाहिए Handler
और AsyncTask
। ये कक्षाएं हमारे लिए ज्यादातर काम करती हैं, हमें केवल यह जानने की जरूरत है कि किन तरीकों को ओवरराइड करना है।
के बीच का अंतर Handler
और AsyncTask
है: का प्रयोग करें AsyncTask
जब कोलर धागा एक है यूआई धागा । यह वही है जो android दस्तावेज़ कहता है:
AsyncTask UI थ्रेड का उचित और आसान उपयोग सक्षम करता है। यह वर्ग थ्रेड और / या हैंडलर में हेरफेर किए बिना पृष्ठभूमि संचालन करने और UI थ्रेड पर परिणाम प्रकाशित करने की अनुमति देता है
मैं दो बिंदुओं पर जोर देना चाहता हूं:
1) यूआई थ्रेड का आसान उपयोग (इसलिए, कॉलर थ्रेड यूआई थ्रेड का उपयोग करें)।
2) हैंडलर में हेरफेर करने की कोई जरूरत नहीं है। (इसका मतलब है: आप AsyncTask के बजाय हैंडलर का उपयोग कर सकते हैं, लेकिन AsyncTask एक आसान विकल्प है)।
इस पोस्ट में बहुत सी बातें हैं जो मैंने अभी तक नहीं कही हैं, उदाहरण के लिए: UI थ्रेड क्या है, या यह क्यों आसान है। आपको प्रत्येक कक्षा के पीछे कुछ विधियों को जानना चाहिए और इसका उपयोग करना चाहिए, आप इसका कारण पूरी तरह से समझ जाएंगे।
@: जब आप Android दस्तावेज़ पढ़ते हैं, तो आप देखेंगे:
हैंडलर आपको एक थ्रेड के MessageQueue से जुड़े संदेश और Runnable ऑब्जेक्ट को भेजने और संसाधित करने की अनुमति देता है
यह विवरण पहली बार में अजीब लग सकता है। हमें केवल यह समझने की आवश्यकता है कि प्रत्येक थ्रेड में प्रत्येक संदेश कतार है (जैसे एक टू-डू लिस्ट), और थ्रेड प्रत्येक संदेश को ले जाएगा और इसे तब तक करेगा जब तक संदेश कतार खाली न हो (जैसे हम अपना काम पूरा करते हैं और बिस्तर पर जाते हैं)। इसलिए, जब Handler
संचार होता है, तो यह कॉलर को एक संदेश देता है और यह प्रक्रिया की प्रतीक्षा करेगा।
उलझा हुआ? बस याद रखें कि Handler
कॉलर थ्रेड से सुरक्षित रूप से संवाद कर सकते हैं।