Handler.dispatchMessage(MSG)和Handler.sendMessage之间的差(MSG) [英] The difference between Handler.dispatchMessage(msg) and Handler.sendMessage(msg)
问题描述
当我使用Handler.dispatchMessage(MSG)的的handleMessage(消息MSG)将在新的线程上运行,但是当我使用Handler.sendMessage(MSG)的的handleMessage(消息MSG)将在主线程中运行,谁可以告诉我的差别bewteen他们。
谢谢!
演示:
公共类MainActivity扩展活动
{
私人字符串变量=MainActivity;
私人处理程序mHandler =新的处理程序()
{
@覆盖
公共无效的handleMessage(信息MSG)
{
Log.i(TAG,处理程序:+ Thread.currentThread()的getId()+&放大器; ARG1 =+ msg.arg1);
super.handleMessage(MSG);
}
};
@覆盖
公共无效的onCreate(包savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
Log.i(TAG,主:+ Thread.currentThread()的getId());
测试方法();
}
私人无效TestMethod的()
{
线程线程=新的Thread()
{
@覆盖
公共无效的run()
{
Log.i(TAG,主题:+ Thread.currentThread()的getId());
消息味精= mHandler.obtainMessage();
msg.arg1 = 1;
mHandler.dispatchMessage(MSG);
消息MSG 2 = mHandler.obtainMessage();
msg2.arg1 = 2;
mHandler.sendMessage(MSG 2);
}
};
thread.start();
}
}
输出:
11月四号至19号:32:10.452:信息/ MainActivity(774):主营:1 11月四号至19号:32:10.488:信息/ MainActivity(774):主题:8 11月四号至19号:32:10.492:信息/ MainActivity(774):处理器:8 ARG1 = 1 11月四号至19号:32:10.635:信息/ MainActivity(774):处理程序:1 ARG1 = 2
mHandler.dispatchMessage(MSG)
就像直接调用的handleMessage(信息MSG )
,我不知道什么时候会很有用。处理程序的关键是将消息发送到其他线程的能力。这就是你做的的sendMessage
。
编辑:正如你可以看到它只是调用的handleMessage()
您
/ **
*这里手柄系统消息。
* /
公共无效在DispatchMessage(信息MSG){
如果(msg.callback!= NULL){
//回调= Runnable对象,你可以发布消息,而不是。
msg.callback.run();
} 其他 {
如果(mCallback!= NULL){
如果(mCallback.handleMessage(MSG)){
返回;
}
}
的handleMessage(MSG);
}
}
when i use Handler.dispatchMessage(msg),the handleMessage(Message msg) will be run on new thread,but when i use Handler.sendMessage(msg),the handleMessage(Message msg) will be run on main thread,who can tell me the difference bewteen them.
thanks!
Demo:
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();
}
}
Output:
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
mHandler.dispatchMessage(msg)
is like directly calling handleMessage(Message msg)
and I don't know when that would be useful. The point of Handlers is the ability to send messages to other threads. That's what you do with sendMessage
.
Edit: as you can see it just calls handleMessage()
for you.
/**
* 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);
}
}
这篇关于Handler.dispatchMessage(MSG)和Handler.sendMessage之间的差(MSG)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!