Handler(一)——Mars Andoird開發視頻第二季第六集(重)

1. 什麼是Handler

handler就是消息處理器;併發

Handler、Looper和MessageQueue(消息隊列)三者實現了安卓中最重要的消息傳遞、處理機制。oop

2. Handler、Looper和MessageQueue的基本原理

輸入圖片說明

  • Handler:負責將消息對象加入到消息隊列(Message Queue)中;code

  • Message Queue:藍色矩形爲消息隊列。特色爲先進先出,數據從尾部加入,從頭部出來。對象

  • Looper:負責不停地從隊列中往外取出消息對象;沒有消息對象時處於等待狀態。取出消息對象後,將會交給Handler處理。繼承

3. 一個使用Hanlder的例子

例子具體實現這樣一個功能:隊列

點擊按鈕,標記消息對象,併發送到消息隊列中。 以後當hanlder接收到這個消息對象時,將消息對象的標記(what字段)打印出來。圖片

  • 先得建立消息,才能發送消息:
class ButtonListener implements OnClickListener {
		public void onClick(View v) {
			Message msg = handler.obtainMessage();//建立消息
			msg.what = 2;//消息標記what,是一個整型字段
			handler.sendMessage(msg);
		}
	}

接着系統會進行如下操做:消息隊列

1 消息對象被髮送到消息隊列中it

2 Looper從消息隊列中取出消息對象class

3 Looper找到與消息對象對應的hanlder對象

4 Looper將消息對象交給handler對象處理

5 handler對象調用handlerMessage(Message msg)方法,來處理消息對象

  • 接着咱們要作的就是重寫handlerMessage方法來處理消息對象。

那麼咱們須要建立一個繼承Handler的類,並重寫這個方法。

class MyHandler extends Handler {

		public void handleMessage(Message msg) {
			super.handleMessage(msg);
		}
		
	}
  • 在handlerMessage方法中,咱們想要將消息對象的標記打印出來,那麼:
public void handleMessage(Message msg) {
			super.handleMessage(msg);
			
			int what = msg.what;
			System.out.println("what: " + what);
		}
  • 最後,實例化MyHandler對象:

(handler 爲 成員變量)

private Handler handler;
handler = MyHandler();

完成以後,咱們點擊按鈕,就能打印出消息標記了:

輸入圖片說明

相關文章
相關標籤/搜索