前言:主線程和子線程的相互交互:
一、子線程向主線程發(fā)消息(Thread+handler):
1、主線程中定義Handler:
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
//do something,refresh UI;
break;
default:
break;
}
}
};
2、子線程處理完耗時操作之后發(fā)消息給主線程,更新UI:
mHandler.sendEmptyMessage(0);
這樣在子線程與主線程任務(wù)分工的條件下完成了消息交互;
二、主線程向子線程發(fā)送消息(Thread+handler):
主線程碰到耗時操作要子線程完成,此時發(fā)通知給子線程,操作步驟如下:
1、子線程中定義Handler,Handler定義在哪個線程中,就跟那個線程綁定,在線程中綁定Handler需要調(diào)用Looper.prepare();方法,主線程中不調(diào)用是因為主線程默認幫你調(diào)用了;
public class LoopThread implements Runnable {
public Handler mHandler = null;
@Override
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
String result = NetUtil.getJsonContent("北京");
//完成了獲取北京天氣的操作;
Log.i("test", "handler"+result);
}
};
Looper.loop();
}
}
其中Looper.prepare();和Looper.loop();維護了一個消息隊列,等待消息注入并在子線程中執(zhí)行;
2、主線程中這樣調(diào)用:(當然,也可以在其他子線程調(diào)用,實現(xiàn)子線程與子線程的交互)
lThread.mHandler.sendEmptyMessage(0);