Android 子線程更新UI解決方案

main thread(主線程)也叫UI thread(UI線程)

背景

Android4.0開始,
Android中請求網絡強制不允許在主線程中操作,
而更新UI的操作由不允許在子線程中更新UI

爲什麼Android從4.0開始就不允許在主線程連接網絡?
爲什麼Android從4.0開始就不允許在非UI線程中進行UI操作?

Android 4.0 和 Android 6.0 版本改動很多,前者主要是限制UI操作,後者主要是規範權限使用

應用場景

當我們的碼農在子線程中請求網絡,拿到服務器返回的數據之後,要更新UI
由於系統的要求,勢必會產生一種矛盾:數據在子線程,更新UI要在主線程
此時我們必須要把數據返回到主線程中才行,Handler機制應運而生。

Handler機制是什麼?
答:Handler機制是Android中用於線程間通信一套通信機制。

在這裏插入圖片描述

//在主線程中初始化Handler
 private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //在此處處理消息
        }
};


Thread thread = new Thread(){
        @Override
        public void run() {
            super.run();
            //在子線程中發送消息
            Message msg = new Message();
            msg.arg1 = 5;
            handler.sendEmptyMessage(msg);
        }
};
thread.start();

在這裏插入圖片描述
在這裏插入圖片描述
如果覺得Handler機制繁瑣,可調用 ActivityrunOnUiThread() 方法

runOnUiThread(new Runnable() {
     void run() {
         // Do stuff…
     }
});

Android Handler:手把手帶你深入分析 Handler機制源碼

理解 Activity.runOnUiThread

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章