Android Handler handleMessage()與sendMessage()的小坑。

最近在溫習(xí)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);

結(jié)果發(fā)現(xiàn)怎么都收不到信息,handleMessage里的日志沒有執(zhí)行。

后來發(fā)現(xiàn)handleMessage()和sendMessage()有細微區(qū)別。下面直接上代碼~

     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

由這個看來。當(dāng)我們構(gòu)造Handler傳參為CallBack的時候,我們使用handler.handleMessage();來觸發(fā)的時候,handler是沒有處理的。只能使用sendMessage();的方式來發(fā)送。

簡單點,我們所有的地方都使用sendMessage();就能避免這個問題發(fā)生~

如果該文章對您有所幫助,希望您可以點下喜歡~給作者一點鼓勵!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容