這次學習了android中一個很重要的組件handler,我目前知道最大的作用就是main thread 和 worker thread 互相傳遞消息..
首先是 worker thread 向 main thread 發送消息..
基本思路就是,
1.在主線程中生成一個handler,初始化..
2.覆蓋handler的handlemessage方法.
3.在worker thread 中通過handler.obtainMessage()獲得一個消息對象.
4.把需要傳給主線程的信息放到消息對象中.
5.通過handler.sendmessage方法發送消息給主線程.
然後主類的handlemessage方法就會接收到worker thread 線程中發送來的消息..
public void run() {
//準備looper對象
Looper.prepare();
//在workerthread當中生成一個handler對象
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
System.out.println("收到OnClick:"+ Thread.currentThread().getName());
}
};
//調用looper的loop()方法之後,looper對象將不斷的從消息隊列中取出
//消息對象.然後調用handler的handleMessage方法來處理消息如果消息隊列沒有對象,則該線程阻塞
Looper.loop();
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
String s = (String)msg.obj;
System.out.println("當前線程名:" + Thread.currentThread().getName());
tv1.setText(s);
}
}
這個是worker thread 傳送消息給主類, 主類的消息隊列獲得消息後傳送個myHandler類中的方法 handleMessage
class NetworkThread extends Thread {
public void run() {
System.out.println("當前線程名:" + Thread.currentThread().getName());
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String s = "從網絡當中獲取的數據";
Message msg = handler.obtainMessage();
msg.obj = s;
handler.sendMessage(msg);
}
}