Android中UI線程與worker線程的通信方法


在安卓開發中,線程是十分重要的,幾乎你能看到的所有的界面或者功能都是通過線程來完成的。安卓中的線程又分UI線程和工作線程。其中UI線程主要負責和用戶交互(說白了就你你在安坐上看到的界面,點擊或者拖動這樣一些效果);而其它線程出現的主要目的是為UI線程服務。

一般而言,用戶新建線程的目的是為了做一些計算或者進行一些IO操作來處理用戶的需求。但是由於UI線程和其它線程是兩個線程,不能使用一般的在同一個線程間變量通信的方式來進行數據傳遞。只好令找解決辦法,目前我發現了又如下方法可以解決這個問題:

方法一:使用final關鍵字:在新線程中使用UI線程中定義的變量

將想要被新線程使用的變量用final關鍵字修飾后傳入新線程中,就能在新線程中使用該變量的值,則此時的數據傳遞方式是:UI線程 --》 新線程。具體的代碼實現如下:

final String flag = "hello android thread";
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println(res);
    }
}).start();

方法二:使用handler進行線程之間的通信

實現原理:新線程向主線程發消息,主線程處理消息(有點類似與windows的消息處理機制)。具體的實現方式如下:

final Handler handler = new Handler() {
    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        System.out.println("收到來自worker線程的消息:" + msg.toString())
    }
};
new Thread(new Runnable() {
    @Override
    public void run() {
        Message message = handler.obtainMessage();
        message.obj = "hello android thread;
        handler.sendMessage(message);  // 向UI線程發送消息
    }
}).start();

個人推薦使用第二種方法進行通信。因為在安卓的最新版本中是不允許新線程修改UI線程中的組件狀態的,使用handler的機制就避免了在新線程直接修改UI線程中的組件,而可以讓UI線程自己進行組件的修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM