Handler.dispatchMessage(MSG)和Handler.sendMessage之间的差(MSG)

编程入门 行业动态 更新时间:2024-10-10 05:16:03
本文介绍了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)

本文发布于:2023-11-27 09:46:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637569.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:dispatchMessage   Handler   sendMessage   MSG

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!