6
,handleMessage(消息msg)將在新線程上運行,但是當我使用Handler.sendMessage( msg),handleMessage(Message msg)將在主線程上運行,誰可以告訴我它們之間的區別。當我使用Handler.dispatchMessage(msg)時,Handler.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
哪裏對象**「消息」**來自上面的代碼? – waqaslam 2012-04-19 13:46:01
@Waqas from your code'mHandler.dispatchMessage(msg)' - 它是'Handler.dispatchMessage'的源代碼(稍微簡化) – zapl 2012-04-19 13:52:11
是的,但是* dispatchMessage(消息味精)*說** msg **,但是在代碼中它也是使用**消息**這是誰我關於 – waqaslam 2012-04-19 13:58:04