最近在温习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();就能避免这个问题发生~
如果该文章对您有所帮助,希望您可以点下喜欢~给作者一点鼓励!
网友评论