获取到哪个线程的Handler,就可以给这个线程发送消息。
线程间通信的桥梁。
动态更新Activity界面上面的数据。3s后,让界面上的数字每秒后增加1。
Handler uiHandler = null;
public void initHandler(){
uiHandler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
Log.d(TAG, String.format("[uiHandler][handleMessage]Message=%s", msg));
switch (msg.what){
case Config.ADD_ONE:
number++;
textView.setText(String.valueOf(number));
break;
default:
Log.d(TAG, String.format("[uiHandler][handleMessage]Other what of message %s", msg.what));
break;
}
super.handleMessage(msg);
}
};
}
public void startAddNumberThread(){
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
while (true) {
Message message = uiHandler.obtainMessage();
message.what = Config.ADD_ONE;
uiHandler.sendMessage(message);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}


创建threadA,等待threadB创建完成后给threadB发送一条消息。
new Thread(new Runnable() {
@Override
public void run() {
try {
Looper.prepare();
handlerA = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
Log.d(TAG, String.format("[ThreadA][UseHandlerA][GetMessage]\t%s", msg.obj));
}
};
// wait for handlerB isn't null
Thread.sleep(1000);
while (handlerB==null) {
;
}
Message msg = Message.obtain();
msg.what = Config.THREADA;
msg.obj = "Hi thread B, this's thread A";
Log.d(TAG, String.format("[ThreadA][UseHandlerB][SendMessage]\t%s", msg.obj));
handlerB.sendMessage(msg);
//enter loop.
Looper.loop();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
创建threadB。接收threadA发送的消息后回复一条消息。
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
handlerB = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
Log.d(TAG, String.format("[ThreadB][UseHandlerB][GetMessage]\t%s", msg.obj));
Message msgB = Message.obtain();
msgB.what = Config.THREADA;
switch (msg.what) {
case Config.THREADA:
msgB.obj = "Dear thread A, i'am fine, thanks and bye.";
Log.d(TAG, String.format("[ThreadB][UseHandlerA][SendMessage]\t%s", msgB.obj));
handlerA.sendMessage(msgB);
break;
}
}
};
Looper.loop();
}
}).start();
结果输出
[ThreadA][UseHandlerB][SendMessage] Hi thread B, this's thread A
[ThreadB][UseHandlerB][GetMessage] Hi thread B, this's thread A
[ThreadB][UseHandlerA][SendMessage] Dear thread A, i'am fine, thanks and bye.
[ThreadA][UseHandlerA][GetMessage] Dear thread A, i'am fine, thanks and bye.
源码: handler进程通信-Demo2ThreadAToThreadB,有用的话敬请Star。