1. 通过Handler实现线程间通信
handler、Looper、Message Queue(消息队列)的重要价值就是实现主线程与工作线程之间的通信
实现:将工作线程中的数据通过消息传递到主线程中。
例子:
点击按钮,启动线程;休眠2秒后将带有数据的消息发送出去。
之后当Hanlder接收到数据时,将数据显示在文本域上。
1.1 在Worker Thread中通过Handler发送消息
- 线程:
Message.obj 字段可以用来储存数据
Handler.sendMessage方法在任何线程中都可使用
class NetWorkThread extends Thread {
public void run() {
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String date = "工作线程中的数据";
Message msg = handler.obtainMessage();
msg.obj = date;
handler.sendMessage(msg);
}
}
- 按钮监听:
启动线程
class ButtonListener implements OnClickListener {
public void onClick(View v) {
new NetWorkThread().start();
}
}
1.2 主线程中实现Handler的handleMessage()方法
- 继承Handler、重写handleMessage方法,处理接收到的消息。
将工作线程传来的数据显示在UI上
class MyHandler extends Handler {
public void handleMessage(Message msg) {
super.handleMessage(msg);
String date = (String) msg.obj;
textView_1.setText(date);
}
}
效果:
启动程序:
点击按钮: