Handler(下)——Mars Andoird開發視頻第二季第八集(重)

主線程向工做線程發送消息

1. 在工做線程中準備Looper對象

2. 在工做線程中實例化Handler對象

3. 在主線程中發送消息

例子:併發

實現點擊按鈕,發送消息對象;在工做線程中接收處理消息對象。oop

  • WokerThread 類
準備Looper對象,並生成Handler對象

· 能夠在工做線程裏,直接寫Handler匿名內部類來實現handleMessage方法;線程

· 也能夠在外面寫個內部類實現Handler,而後在這裏實例化。code

這裏使用後者對象

class WorkerThread extends Thread {
		public void run() {
			Looper.prepare();
			handler = new MyHandler();
			Looper.loop();
//調用looper的loop方法以後,Looper將不斷從消息隊列中取出消息對象
//而後調用handler的handleMessage方法處理消息對象
//若是沒有消息對象,則線程阻塞
		}
	}
  • 在onCreate方法中啓動這個工做線程
new WorkerThread().start();
  • 繼承Hanlder的內部類:
class MyHandler extends Handler {
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			System.out.println("handleMessage方法,當前:" + Thread.currentThread().getName() + " 接收到消息");
			System.out.println("收到的數據爲:" + msg.obj);
		}
	}
  • 建立消息併發送出去

按鈕監聽:繼承

class ButtonOnClickListener implements OnClickListener {
		public void onClick(View v) {
			System.out.println("當前爲:" + Thread.currentThread().getName() + "Thread---發送消息");
			Message msg = handler.obtainMessage();
			String s = "Hello";
			System.out.println("發送的數據爲:" + s);
			msg.obj = s;
			handler.sendMessage(msg);
		}
	}

輸入圖片說明

相關文章
相關標籤/搜索