Android 子线程间通信

时光总嘲笑我的痴心妄想 提交于 2020-03-05 01:53:18
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();这句话让消息循环,就不会有输出提示了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!