当我使用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)
发布评论