Handler.dispatchMessage(MSG)和Handler.sendMessage之间的差(MSG) [英] The difference between Handler.dispatchMessage(msg) and Handler.sendMessage(msg)

查看:231
本文介绍了Handler.dispatchMessage(MSG)和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆