Android.os.Handler涉及較多的知識點,我把一些關鍵詞列舉在下面,将主要介紹Handler:
Handler在android裡負責發送和處理消息。它的主要用途有:
1)按計劃發送消息或執行某個Runnanble(使用POST方法);
2)從其他線程中發送來的消息放入消息隊列中,避免線程沖突(常見于更新UI線程)
利用Timer 編寫一個倒計時程式,程式使用Timer和TimerTask來完成倒計時,同時使用sendMessages方法發送消息,然後在HanleMessage裡更新UI。
Activity布局:

Layout
這裡使用TextView 來顯示倒計時的時間變化,兩個按鈕用于控制時間的開始和停止。SeekBar主要是用于檢視線程是否被阻塞(阻塞時無法拖動)。

onCreate

發送消息
實作Button按鈕的事件處理以此進入倒計時操作。這裡使用的Timer 來執行定時操作(其實我們完全可以另起一個線程)。Task類繼承了TimerTask類,裡面增加了一個任務處理接口來實作回調模式,應此Activity需要實作該回調的接口 ITaskCallBack(這樣做是因為我比較不喜歡内部類的編寫方法)。

ICallBack接口和Task類
這是Java的回調函數的一般寫法。

實作CallBack
可以看到在onCreate 方法中線程的ID是1(UI線程) 這與 HandlerMessage 進行消息處理時是所作的線程ID是一樣的,而消息發送的線程ID則為8非UI線程。

Activity類

自定義的線程類
這裡繼承了Thread類,也可以直接實作 Runnable接口。
Post的各種方法是把一個Runnable發送給消息隊列,它将在到達時進行處理。

POST
使用POST的方式 是将Runnable 一起發送給處理的線程(這裡為UI),如果Runnable的操作比較耗時的話那線程将進入阻塞狀态。可以看到先運作 Runnable的Run方法 然後在進入 HandleMessage() 。我還嘗試了另一種寫法,将TimerThreadPOST過去,運作結果是一樣的。

代碼
可以說POST的各種方法主要是用于 “按計劃發送消息或執行某個Runnanble(使用POST方法)”。