最近在溫習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);
結果發(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);
}
然后打印日志如下:
由這個看來。當我們構造Handler傳參為CallBack的時候敷燎,我們使用handler.handleMessage()暂筝;來觸發(fā)的時候,handler是沒有處理的硬贯。只能使用sendMessage();的方式來發(fā)送焕襟。
簡單點,我們所有的地方都使用sendMessage();就能避免這個問題發(fā)生~
如果該文章對您有所幫助饭豹,希望您可以點下喜歡~給作者一點鼓勵!