在Android編程中,只有事件處理往往並不能滿足使用者與程式互動的需要,下面將對Android平台下訊息的傳遞機制Handler訊息進行介紹。
在Android平台中,新啟動的線程是無法訪問Activity裡的Widget的,當然也不能將運行狀態外送出來,這就需要有Handler機制進行訊息的傳遞了,Handler類位於android.os包下,主要的功能是完成Activity的Widget與應用程式中線程之間的互動。接下來對該類中常用的方法進行介紹,如下表所示。
方法簽名 |
描 述 |
public void handleMessage (Message msg) |
子類對象通過該方法接收資訊 |
public final boolean sendEmptyMessage (int what) |
發送一個只含有what值的訊息 |
public final boolean sendMessage (Message msg) |
發送訊息到Handler, 通過handleMessage方法接收 |
public final boolean hasMessages (int what) |
監測訊息佇列中是否還 有what值的訊息 |
public final boolean post (Runnable r) |
將一個線程添加到訊息佇列 |
在多線程中經常要使用Handler,Thread和Runnable這三個類。Android的CPU分配的最小單元是線程,Handler一般是在某個線程裡建立的,因而Handler和Thread就是相互綁定的,一一對應。 而Runnable是一個介面,Thread是Runnable的子類。所以說,他倆都算一個線程。 HandlerThread顧名思義就是可以處理訊息迴圈的線程,他是一個擁有Looper的線程,可以處理訊息迴圈。 與其說Handler和一個線程綁定,不如說Handler是和Looper一一對應的。 最後需要說明的是,在UI線程(主線程)中:
mHandler=new Handler();
mHandler.post(new Runnable(){
void run(){
//執行代碼... }
});
這個線程其實是在UI線程之內啟動並執行,並沒有建立線程。 常見的建立線程的方法是:
Thread thread = new Thread();
thread.start();
HandlerThread thread = new HandlerThread("string");
thread.start();