sendEmptyMessage(intwhat)与sendMessage(Messagemsg)的区别
系统源码查看比较
publicfinal boolean sendEmptyMessage(int what){
return sendEmptyMessageDelayed(what, 0);
}
就是调用了sendEmptyMessageDelayed()而已,下面看下这个方法:
publicfinal boolean sendEmptyMessageDelayed(int what, long delayMillis){
Message msg = Message.obtain();
msg.what = what;
return sendMessageDelayed(msg, delayMillis);
}
而sendMessage(Messagemsg)的实现和上面一样,请看:
publicfinal boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
原来在sendEmptyMessageDelayed中就是构建了一个Message,然后把这个Message的what设置成sendEmptyMessage方法中的What参数即可。
一切恍然大悟!
然后,在主线程中,Looper类的loop()通过 调用:msg.target.dispatchMessage(msg),调用Hanler类的dispatchMessage(Messagemsg)方法,从而在主线程中处理了这个Message.