美文网首页每天一道Android面试题
Handler dispatchMessage逻辑分析

Handler dispatchMessage逻辑分析

作者: 那个阳光下奔跑的少年 | 来源:发表于2020-02-24 13:00 被阅读0次
    /**
         * Handle system messages here.
         */
        public void dispatchMessage(Message msg) {
            if (msg.callback != null) {
               handleCallback(msg);
            } else {
                if (mCallback != null) {
                    if (mCallback.handleMessage(msg)) {
                        return;
                    }
                }
                handleMessage(msg);
            }
        }
    

    如果Message存在callback,会调用Message callback,我们下面看一下 Message callback是在哪里传进来的,我们看一下Handler post方法

    public final boolean post(Runnable r)
       {
           return  sendMessageDelayed(getPostMessage(r), 0);
       }
    

    在接着看一下getPostMessage(r)

    private static Message getPostMessage(Runnable r) {
            Message m = Message.obtain();
            m.callback = r;
            return m;
       }
    

    这里面会给Message callback赋值。
    如果Message没有callback,会走到else,首先会判断Handler.Callback是否为空,不为空,且Handler.Callback handMessage方法返回值为true,则不会执行handler handMessage方法,若返回为false,会执行Handler handleMessage方法

    handler = new Handler(Looper.getMainLooper(),callback){
                @Override
                public void handleMessage(@NonNull Message msg) {
                    Log.e("MainActivity", "Handler handleMessage");
                    super.handleMessage(msg);
                }
            };
            Message msg = new Message();
            msg.what=1;
            handler.sendMessage(msg);
    
    Handler.Callback callback = new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message msg) {
                Log.e("MainActivity", "callback handleMessage");
                return true;//返回为true,不会执行Handler handleMessage方法,返回为false会执行
            }
        };
    

    相关文章

      网友评论

        本文标题:Handler dispatchMessage逻辑分析

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