在安卓開發中,線程是十分重要的,幾乎你能看到的所有的界面或者功能都是通過線程來完成的。安卓中的線程又分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線程自己進行組件的修改。