線程間通信 Thread+handler

前言:主線程和子線程的相互交互:

一、子線程向主線程發(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); 

感謝:
Android 面試題 - 線程間通信

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容