【Android】sendMessage与sendEmptyMessage的异同

写在开头,这两个方法本质是一样一样的。

一直对这两个方法存在疑问,看了好几次也没搞清楚,今天下决心搞定它。

 最直观上这两个方法传入的参数不一样。

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。哦了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值