2010-06-23 22 views
11

मैं जानना चाहता हूं, एक बार सभी के लिए। मैंने कई जगहों पर पढ़ा है। जब मैं कुछ 'लंबे समय के संचालन' करना चाहता हूं तो मुझे Handler का उपयोग करना चाहिए।हैंडलर बनाम थ्रेड

लेकिन मुझे क्यों नहीं मिला? मेरे सभी 'लंबे समय के संचालन' मैं नियमित धागे से घिरा हुआ हूं, और यह ठीक काम करता है।

मैं इसके लिए Handler का उपयोग क्यों करूं?

केवल समय मैं उपयोग करने के लिए Handler था, जब मैं कुछ कार्य शेड्यूल करने के लिए था (postDelayed)

वहाँ किसी भी मुख्य विचार मैं याद आती है handlers के बारे में (जब मैं वास्तव में इसे का उपयोग करना चाहिए) है? या शायद वास्तव में कोई अंतर नहीं है?

+0

[हैंडलर बनाम AsyncTask बनाम थ्रेड] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/6964011/handler-vs-asynctask-vs-thread) –

उत्तर

16

Handler आपको अपने पृष्ठभूमि थ्रेड से यूआई थ्रेड के साथ संवाद करने देता है। ऐसा इसलिए है क्योंकि यूआई संचालन पृष्ठभूमि धागे के भीतर से प्रतिबंधित है। ध्यान दें कि संस्करण 1.5 से शुरू होने पर, AsyncTask वर्ग ऐसा करने में बहुत आसान बनाता है।

+1

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

+2

@rayman: अगर आपको किसी भी UI घटक तक पहुंच की आवश्यकता है, तो आपको एक हैंडलर की आवश्यकता है - लेकिन यदि आप API स्तर 3 और ऊपर लक्षित कर रहे हैं, तो AsyncTask आपके लिए नौकरी को आसान बनाता है। यदि आपको यूआई तक पहुंच की आवश्यकता नहीं है, तो आपको किसी भी चीज की आवश्यकता नहीं है और केवल एक नया थ्रेड पैदा कर सकता है। – JRL

+0

गोटो! धन्यवाद। – rayman

1

यह केवल यूआई थ्रेड पर वापस आने के बारे में नहीं हो सकता है क्योंकि runOnUiThread (Runnable) बहुत अच्छी तरह से करता है। मुझे संदेह है कि एंड्रॉइड के लिए धागे और अन्य संसाधनों को प्रबंधित करना आसान है जो किसी गतिविधि के संदर्भ से बाहर नहीं रहना चाहिए, और "गतिविधि लीक हो गई है ..." अपवाद आपको बताते हैं कि यह कब हुआ।

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