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); } }
效果:
启动程序:
点击按钮: