runOnUiThread vs Looper.getMainLooper ()। Android में पोस्ट


99

क्या कोई मुझे बता सकता है कि एंड्रॉइड में UI थ्रेड पर किसी कार्य को निष्पादित करने के लिए runOnUiThread () बनाम Looper.getMainLooper () पोस्ट () का उपयोग करने के बीच कोई अंतर है या नहीं?

केवल एक चीज जो मैं निर्धारित कर सकता हूं, वह यह है कि चूंकि runOnUiThread एक गैर-स्थैतिक गतिविधि विधि है, Looper.getMainLooper () पोस्ट () अधिक सुविधाजनक है जब आपको किसी वर्ग में कुछ कोड करने की आवश्यकता होती है जो गतिविधि नहीं देख सकता है (जैसे कि एक इंटरफ़ेस)।

मैं व्हाट्सएप पर चर्चा की तलाश नहीं कर रहा हूं कि कुछ यूआई थ्रेड पर निष्पादित किया जाना चाहिए, मुझे लगता है कि कुछ चीजें नहीं मिल सकती हैं और बहुत सी चीजों को नहीं करना चाहिए, हालांकि कुछ चीजें (जैसे एक AsyncTask शुरू करना) से निष्पादित किया जाना चाहिए। यूआई धागा।

धन्यवाद,
आर।


6
इसके अलावा कोई अंतर नहीं है कि runOnUiThreadयह जांच करेगा कि क्या यह पहले से ही यूआई थ्रेड है और इसे पोस्ट करने के बजाय सीधे अपने कार्य को अंजाम देंMessage
zapl

1
धन्यवाद। क्या आप कृपया इसे उत्तर में बदल सकते हैं, इसलिए मैं इसे स्वीकार कर सकता हूं ??
रिच

इसके अलावा, मैंने पहले से ही यह जांचने के लिए कुछ कोड लिखा है कि क्या UI थ्रेड पर कुछ निष्पादित किया जा रहा है, इसलिए मैन्युअल रूप से शामिल करना बहुत सरल होगा।
रिच

जवाबों:


192

जब बैकग्राउंड थ्रेड्स से कॉल किया जाता है तो निम्न व्यवहार होता है:

  • का उपयोग करते हुए Looper.getMainLooper()

    Runnable task = getTask();
    new Handler(Looper.getMainLooper()).post(task);
  • का उपयोग करते हुए Activity#runOnUiThread()

    Runnable task = getTask();
    runOnUiThread(task);

अंतर केवल तब है जब आप UI थ्रेड से ऐसा करते हैं

public final void runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
    } else {
        action.run();
    }
}

जाँच करेगा कि क्या वर्तमान थ्रेड पहले से ही UI थ्रेड है और फिर इसे सीधे निष्पादित करें। संदेश के रूप में इसे पोस्ट करने से निष्पादन में देरी होगी जब तक कि आप वर्तमान यूआई-थ्रेड विधि से वापस नहीं आते।

RunnableUI थ्रेड पर निष्पादित करने के लिए एक तीसरा तरीका भी है जो यह होगा View#post(Runnable)- यह हमेशा यूआई थ्रेड से कॉल किए जाने पर भी संदेश पोस्ट करेगा। यह उपयोगी है क्योंकि यह सुनिश्चित करेगा कि Viewकोड को निष्पादित करने से पहले इसका ठीक से निर्माण किया गया है और इसका लेआउट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.