注意本博文转自:https://blog.youkuaiyun.com/yingpaixiaochuan/article/details/50802752
写在开头,这两个方法本质是一样一样的。
一直对这两个方法存在疑问,看了好几次也没搞清楚,今天下决心搞定它。
最直观上这两个方法传入的参数不一样。
sendMessage(Message msg)
sendEmptyMessage(int what)
一个传入的是Message,另一个传入的是int,细心的人或许就联想了,Message里边也有个int类型的what,是的,这个很关键。
接下来看源码了,这两个源码很简单,很容易就懂了。
public final boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
public final boolean sendEmptyMessage(int what)
{
return sendEmptyMessageDelayed(what, 0);
}
怎么感觉跟没看一样嘛,别气馁,再往里深入一点就柳暗花明了。
不再看sendMessageDelayed(msg, 0)的源码了,只查看sendEmptyMessageDelayed(what, 0)的源码:
public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {
Message msg = Message.obtain();
msg.what = what;
return sendMessageDelayed(msg, delayMillis);
}
sendEmptyMessageDelayed(what) 竟调用的是sendMessageDelayed(msg, 0)的方法。
是不是有点晕了,为了更清晰明了,我画了个糙图,可以帮助理解。
写到这,你们应该明白了,其实这两个方法是一样一样的,一个传Message类型的msg,一个传int类型的what,传what的,最终会转为msg。