我们日常使用处理线程间的通信是 主线程与子线程之间相互通信,也就是使用android提供的handler。

  那么子线程之间如何相互通信呢?一般有可能会使用 全局变量来进行通信,其实我们也可以使用系统提供的handler来进行子线程中的通信。

 handler的通信机制

此处引用:https://blog.csdn.net/blackzhangwei/article/details/51945516

android 子线程使用handler通信

由上图可以看出  handler负责消息的处理和发送的,messageQueue 是存储消息队列的,Looper 是处理消息的

主线程在创建时或创建 looper 所以我们子线程可以和主线程通信,那么由此我们也可以在子线程中创建looper 来实现子线程中的通信。

线程1

Runnable runnable1 = new Runnable() {
        @Override
        public void run() {
            Looper.prepare();
            handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    Log.e("Data", "handleMessage: " + msg.obj.toString());
                }
            };
            Looper.loop();
        }
    };

线程2

Runnable runnable2 = new Runnable() {
        @Override
        public void run() {
            //Looper looper = Looper.myLooper();
            Message message = handler.obtainMessage();
            message.obj = "你好啊,线程一";
            handler.sendMessage(message);
        }
    };

线程二中使用的 handler 是线程一中创建的 handler

线程一中使用的looper方法

Looper.prepare();   将当前线程初始化为 消息线程   

Looper.loop();  在此线程中运行 消息队列

那么如何停止运行呢

Looper.quit();   停止运行消息队列,不处理任何消息。

更多looper方法 

https://developer.android.google.cn/reference/android/os/Looper.html

英文是半吊子的,可以像我一样翻译网页。 ????????

相关文章: