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