पोस्ट : संदेश संदेश कतार में Runnable को पोस्ट करने का कारण बनता है,
Runnable: एक कमांड को निष्पादित करता है जिसे निष्पादित किया जा सकता है। अक्सर एक अलग थ्रेड में कोड चलाते थे।
रन () : क्लास के कोड के सक्रिय भाग को निष्पादित करना शुरू करता है। इस पद्धति को तब कहा जाता है जब एक धागा शुरू किया जाता है जिसे एक वर्ग के साथ बनाया गया है जो कि रननेबल को लागू करता है।
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
कोड :getView().startAnimation(a);
आपके कोड में,
संदेश कतार को जोड़ने के लिए रननेबल ( कोड अलग-अलग थ्रेड में चलाया जाएगा) पोस्ट का कारण बनता है ।
जब मैसेज क्यू से लाया जाता है तो एक नए सूत्र में प्रारंभ किया जाएगा
[संपादित 1]
हम UI थ्रेड (मुख्य थ्रेड) के बजाय नए थ्रेड का उपयोग क्यों करते हैं?
UI थ्रेड:
जब आवेदन शुरू किया जाता है, यूआई थ्रेड स्वचालित रूप से बनाया जाता है
यह घटनाओं को उचित विजेट में भेजने का प्रभारी है और इसमें ड्राइंग इवेंट शामिल हैं।
यह वह धागा भी है जिसके साथ आप एंड्रॉइड विजेट्स के साथ बातचीत करते हैं
उदाहरण के लिए, यदि आप स्क्रीन पर एक बटन स्पर्श करते हैं, तो UI थ्रेड स्पर्श ईवेंट को विजेट पर भेज देता है जो बदले में इसकी दबाया हुआ स्थिति सेट करता है और ईवेंट कतार में एक अमान्य अनुरोध पोस्ट करता है। UI थ्रेड अनुरोध को हटा देता है और विजेट को फिर से शुरू करने के लिए सूचित करता है।
यदि कोई उपयोगकर्ता एक बटन दबाता है जो लंबे समय तक चलेगा तो क्या होगा?
((Button)findViewById(R.id.Button1)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
});
यूआई जमा देता है। प्रोग्राम क्रैश भी हो सकता है।
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
यह एंड्रॉइड नियम को तोड़ता है जो वर्कर थ्रेड से कभी भी यूआई को अपडेट नहीं करता है
एंड्रॉइड यूआई थ्रेड को अन्य थ्रेड्स से एक्सेस करने के कई तरीके प्रदान करता है।
- Activity.runOnUiThread (Runnable)
- View.post (Runnable)
- View.postDelayed (चलाने योग्य, लंबा)
- हैंडलर
नीचे की तरह,
View.post (Runnable)
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.post(new Runnable() {
public void run() {
mImageView.setImageBitmap(b);
}
});
}
}).start();
}
हैंडलर
final Handler myHandler = new Handler(Looper.getMainLooper());
(new Thread(new Runnable() {
@Override
public void run() {
final Bitmap b = loadImageFromNetwork();
myHandler.post(new Runnable() {
@Override
public void run() {
mImageView.setImageBitmap(b);
}
});
}
})).start();
}

अधिक जानकारी के लिए
http://android-developers.blogspot.com/2009/05/painless-threading.html
http://www.aviyehuda.com/blog/2010/12/20/android-multithreading-in-a-ui-environment/