標籤:bsp 修改 繼承 學習筆記 控制項 alt android string class
可用於解決上一則筆記所提到的WorkerThread無法修改UI控制項的問題
一、Handler、Looper和MessageQueue的基本原理
Handler把訊息對象放到MessageQueue當中,而Looper負責在訊息佇列頭部不斷取出訊息對象。取出的對象再交給Handler處理。
二、一個簡單的Handler例子
-先建立一個繼承Handler的類,注意是匯入Android.os.Handler(非常重要)
class firstHandler extends Handler{}
-複寫方法handleMessage(Message msg)
-建立Handler對象
handler = firstHandler()
-產生一個Message,並且給what成員變數賦值
Message msg = handler.obtainMessage();
msg.what = 2;
-將訊息對象放置到訊息佇列中。
handler.sendMessage(msg);
-Looper將會從訊息佇列當中將訊息對象取出;
-Looper將會找到與訊息對象對應的Handler對接(每一個Message對象都有與之對應的Handler對象);
-Looper將會調用Handler對象的handleMessage(Message msg)方法,用於處理訊息對象。
三、在主線程當中實現Haandler的handleMessage()方法
註:不管是在WorkerThread還是在MainThread中都可以發送訊息,即:handler.sendMessage(Message msg)
1)在建立線程的run()中發送Message:
class NetworkThread extends Thread{ @Override public void run(){ String s = "類比從網路中擷取的資料"; Message msg = handler.obtainMessage(); msg.obj = s; handler.sendMessage(msg); } }
2)複寫handleMessage()方法。因為這個方法是被主線程調用的,所可以更改UI。
class MyHandler extends Handler{ @Override public void handleMessage(Message msg){ tring s = (String)msg.obj; textView.setText(s); }}
Android學習筆記(十三) Handler