अन्य धागे से जीयूआई अद्यतन करने के लिए, वहाँ मूल रूप से दो मुख्य दृष्टिकोण हैं:अद्यतन कर रहा है जीयूआई: Runnables बनाम संदेश
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
Handler.post(Runnable)
उपयोग java.lang.Runnable
उपयोग android.os.Message:
Handler.sendMessage(Message)/Handler.handleMessage(Message)
आप AsyncTask का भी उपयोग कर सकते हैं, लेकिन मेरा प्रश्न एक बहुत ही सरल घटक को अद्यतन करने के उपयोग के मामले पर अधिक केंद्रित है। चलो देखते हैं कि यह कैसे उपयोग किया जा दोनों दृष्टिकोण:
का उपयोग Runnables:
TextViev tv = ...; final String data = "hello"; Runnable r = new Runnable() { @Override public void run(){ tv.setText(data); } }; //Now call Activity.runOnUiThread(r) or handler.post(r), ...
का उपयोग करते हुए संदेश:
Message m = handler.obtainMessage(UPDATE_TEXT_VIEW, "hello"); handler.sendMessage(m); //Now on handler implementation: @Override public void handleMessage(Message msg) { if(msg.what == UPDATE_TEXT_VIEW){ String s = (String) msg.obj; tv.setText(data); } ... //other IFs? }
IMHO, संदेश के लिए रास्ता नहीं हैं जाओ क्योंकि:
- नए गैर-एंड्रॉइड प्रोग्रामर के लिए समझना आसान नहीं है (निर्माण के दौरान हैंडलर हैंडल हुक)।
- संदेश पेलोड प्रक्रिया को पार करने पर ऑब्जेक्ट पेलोड को पार करने योग्य होना चाहिए।
- संदेश पुन: उपयोग किया जाता है (त्रुटियों की संभावना अगर ठीक से साफ नहीं?)
- हैंडलर दोहरी भूमिका (यह संदेश भेजता है, लेकिन यह भी उन्हें संभालती है)
- संदेश गुण सार्वजनिक कर रहे हैं, लेकिन यह भी प्रदान करते हैं गेटर/सेटर है।
दूसरी तरफ, रननेबल्स प्रसिद्ध ज्ञात पैटर्न का पालन करते हैं, और अधिक प्रोग्रामर-अनुकूल और पठनीय हैं।
तो रननेबल्स पर संदेशों का उपयोग करने के क्या फायदे हैं? क्या आधुनिक दिन एंड्रॉइड प्रोग्रामिंग में संदेश पृष्ठभूमि में धकेल गए हैं? क्या ऐसा कुछ है जो आप संदेशों के साथ कर सकते हैं जो Runnables के साथ नहीं किया जा सकता है?
अग्रिम धन्यवाद।
ठीक है, शायद विचार मेरे प्रश्न में स्पष्ट रूप से सामने नहीं आया है। यह हैंडलर बनाम Runnables नहीं है, लेकिन Handler.sendMessage रननेबल विकल्प बनाम। (इस समूह में 'हैंडलर.postDelayed' और' हैंडलर.postAtTime' भी शामिल है जो # 1) –
आपने वास्तव में अपनी पोस्ट में अंतर को समझाया। मुझे कोई अन्य अंतर नहीं पता है जिसे मैं जोड़ सकता हूं। – Caner