2012-04-19 10 views
6

जब मैं हैंडलर.dispatchMessage (msg) का उपयोग करता हूं, हैंडल मैसेज (संदेश संदेश) नए धागे पर चलाया जाएगा, लेकिन जब मैं हैंडलर.sendMessage का उपयोग करता हूं (msg), हैंडल मैसेज (संदेश संदेश) मुख्य धागे पर चलाया जाएगा, जो मुझे अंतर को बता सकता है।हैंडलर.dispatchMessage (msg) और Handler.sendMessage (msg)

धन्यवाद!

डेमो:

public class MainActivity extends Activity 
{ 
private String TAG = "MainActivity"; 
private Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     Log.i(TAG, "Handler:" + Thread.currentThread().getId() + "&arg1=" + msg.arg1); 
     super.handleMessage(msg); 
    } 

}; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Log.i(TAG, "Main:" + Thread.currentThread().getId()); 
    testMethod(); 
} 

private void testMethod() 
{ 
    Thread thread = new Thread() 
    { 
     @Override 
     public void run() 
     { 
      Log.i(TAG, "Thread:" + Thread.currentThread().getId()); 
      Message msg = mHandler.obtainMessage(); 
      msg.arg1 = 1; 
      mHandler.dispatchMessage(msg); 
      Message msg2 = mHandler.obtainMessage(); 
      msg2.arg1 = 2; 
      mHandler.sendMessage(msg2); 
     } 

    }; 
    thread.start(); 
} 

}

आउटपुट:

 
04-19 11:32:10.452: INFO/MainActivity(774): Main:1 
04-19 11:32:10.488: INFO/MainActivity(774): Thread:8 
04-19 11:32:10.492: INFO/MainActivity(774): Handler:8&arg1=1 
04-19 11:32:10.635: INFO/MainActivity(774): Handler:1&arg1=2 

उत्तर

5

mHandler.dispatchMessage(msg) सीधे कॉल handleMessage(Message msg) की तरह है और मैं नहीं जानता कि जब कि उपयोगी होगा। हैंडलर का बिंदु अन्य धागे को संदेश भेजने की क्षमता है। sendMessage के साथ आप यही करते हैं।

संपादित करें: जैसा कि आप देख सकते हैं कि यह आपके लिए handleMessage() पर कॉल करता है।

/** 
* Handle system messages here. 
*/ 
public void dispatchMessage(Message msg) { 
    if (msg.callback != null) { 
     // callback = the Runnable you can post "instead of" Messages. 
     msg.callback.run(); 
    } else { 
     if (mCallback != null) { 
      if (mCallback.handleMessage(msg)) { 
       return; 
      } 
     } 
     handleMessage(msg); 
    } 
} 
+0

ऑब्जेक्ट ** "संदेश" ** उपरोक्त कोड में कहां से आता है? – waqaslam

+0

@Waqas आपके कोड से 'mHandler.dispatchMessage (msg) '- यह' हैंडलर डिस्प्च मैसेज '(थोड़ा सरलीकृत) के लिए स्रोत कोड है – zapl

+0

हां लेकिन * प्रेषण संदेश (संदेश संदेश) * कहता है ** msg **, लेकिन कोड में भी ** संदेश ** का उपयोग कर रहा है, जिसे मैं – waqaslam

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