Handler是Android的消息传递机制,主要用于线程间通讯
子线程往主线程通信的流程:在主线程中创建了一个子线程,子线程运行并生成Message,通过调用sendmessgae方法传递给handler
示例代码:
private Handler handler = new Handler(Looper.myLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 0){
String strData = (String) msg.obj;
tvContent.setText(strData);
parseJsonData(strData);
//数据解析
}
}
};
public void start(View view){
new Thread(new Runnable() {
@Override
public void run() {
String stringData = getStringFromNet();
Message message = new Message();
message.what = 0;
message.obj = stringData;
handler.sendMessage(message);
}
}).start();
}
消息机制的架构
- 在子线程完成耗时操作,当Handler发送消息时,将会调用MessageQueue.enqueueMessage,向消息队列中添加消息
- 当通过Looper.loop开启循环后,会不断地从线程池中读取消息,即调用MessageQueue.next
- 然后调用目标Handler的dispatchMessage方法传递消息,然后回到到Handler所在线程,目标Handler收到消息,调用handleMessage方法,接收消息,处理业务逻辑
网友评论