美文网首页
Android Handler handleMessage()与

Android Handler handleMessage()与

作者: hansduo | 来源:发表于2018-04-04 11:28 被阅读0次

最近在温习Handler的时候,碰到了一个小坑。直接上代码~

Handler callbackHandler = new Handler(new Handler.Callback() {
       @Override
       public boolean handleMessage(Message msg) {
           Log.e(TAG, "callbackHandler msg.what:" + msg.what);
           return false;
       }
   });

Message msg = Message.obtain();
msg.what = 50;
callbackHandler.handleMessage(msg);

结果发现怎么都收不到信息,handleMessage里的日志没有执行。

后来发现handleMessage()和sendMessage()有细微区别。下面直接上代码~

     Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            Log.e(TAG, "handler msg.what:" + msg.what);
            super.handleMessage(msg);
        }
    };

    Handler handler1 = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            Log.e(TAG, "handler1 msg.what:" + msg.what);
            return false;
        }
    });

    private void send() {
        Log.e(TAG, "send");

        Message message = Message.obtain();
        message.what = 100;
        handler.sendMessage(message);

        Message message1 = Message.obtain();
        message1.what = 101;
        handler1.sendMessage(message1);

        Message message2 = Message.obtain();
        message2.what = 102;
        handler.handleMessage(message2);

        Message message3 = Message.obtain();
        message3.what = 103;
        handler1.handleMessage(message3);

    }

然后打印日志如下:


image.png

由这个看来。当我们构造Handler传参为CallBack的时候,我们使用handler.handleMessage();来触发的时候,handler是没有处理的。只能使用sendMessage();的方式来发送。

简单点,我们所有的地方都使用sendMessage();就能避免这个问题发生~

如果该文章对您有所帮助,希望您可以点下喜欢~给作者一点鼓励!

相关文章

网友评论

      本文标题:Android Handler handleMessage()与

      本文链接:https://www.haomeiwen.com/subject/lhlkhftx.html