1.在android中我们平时处理的都是子线程与主线程间的通信,采用的方法是利用android中的消息循环机制,说白了就是利用Handler
而子线程与子线程的通信也可以用到Handler,也可以通过全局变量来进行通信
2.消息循环机制就不说了,由于主线程在应用启动的时候系统就给它生成了Looper , MessageQueue等消息循环的东西,所以每次子线程
可以直接往主线程发送message。而子线程是不会自动生成Looper的,就要调用Looper.prepare();方法来为该子线程生成Looper,
生成后调用Loopre.loop()来启动消息队列,再在子线程中定义自己的Handler,其他子线程可以调用该Handler来进行,子线程间的通信了。
3.示例代码:
子线程一:
1 new Thread(new Runnable() {
2
3 @Override
4 public void run() {
5 String msg;
6 Looper.prepare();
7
8 childHandler = new Handler() {
9 @Override
10 public void handleMessage(Message msg) {
11 super.handleMessage(msg);
12
13 System.out.println("这个消息是从-->>" + msg.obj
14 + "过来的,在" + "btn的子线程当中" + "中执行的");
15
16 }
17
18 };
19 Looper.loop();
20
21 }
22 }).start();
线程二:
1 new Thread(new Runnable() {
2
3 @Override
4 public void run() {
5
6 Looper loop = Looper.myLooper();
7
8 Message msg = childHandler.obtainMessage();
9 msg.obj = "btn2当中子线程";
10 childHandler.sendMessage(msg);
11
12 }
13 }).start();
运行后的效果是:
这个消息是从-->>btn2当中子线程过来的,在btn的子线程当中中执行的
如果没有Looper.loop();这句话让消息循环,就不会有输出提示了。
来源:https://www.cnblogs.com/liangstudyhome/p/4462159.html