我们日常使用处理线程间的通信是 主线程与子线程之间相互通信,也就是使用android提供的handler。
那么子线程之间如何相互通信呢?一般有可能会使用 全局变量来进行通信,其实我们也可以使用系统提供的handler来进行子线程中的通信。
handler的通信机制
此处引用:https://blog.csdn.net/blackzhangwei/article/details/51945516
由上图可以看出 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
英文是半吊子的,可以像我一样翻译网页。 ????????