Android 台灣中文網

標題: android開發(6) - 初遇handler [打印本頁]

作者: 暗桌之光    時間: 2011-7-10 10:53
標題: android開發(6) - 初遇handler
handler是線程通訊工具類。用於傳遞消息。它有兩個隊列:
1.消息隊列
2.線程隊列

消息隊列使用sendMessage和HandleMessage的組合來發送和處理消息。
線程隊列類似一段代碼,或者說一個方法的委託,用戶傳遞方法。使用post,postDelayed 添加委託,使用 removeCallbacks移除委託。

由上面的特性我們可以簡單看出「handler類似一個容器對象,它攜帶了消息的集合和委託的集合」。java裡沒有委託delegate的概念,但是可以通過class來持有一個可執行的方法代理。

handler更像是一個傳遞者,在另外的線程裡和主線程之間傳遞消息和可執行的代碼。它不僅僅攜帶了數據,而且封裝了一些操作行為,比如說在適當的時機(...)來執行線程隊列裡的「委託」的代碼。

handler可能是和消息隊列交互的,我們在new Handler實例化對像時,這個對象應該就和主線程的消息隊列建立了關係。當我們使用handler.Post(runnabler1),發送一個委託的方法runnabler1代理給handler時,主消息隊列會在適當的時候執行這個runnabler1里的委託方法,即執行了runnabler.run方法。

我們先看個例子:

a1.png
登錄/註冊後可看大圖