android學習筆記之handler初接觸!

這次學習了android中一個很重要的組件handler,我目前知道最大的作用就是main thread 和 worker thread 互相傳遞消息..

首先是 worker thread 向 main thread 發送消息..

基本思路就是,

1.在主線程中生成一個handler,初始化..

2.覆蓋handler的handlemessage方法.

3.在worker thread 中通過handler.obtainMessage()獲得一個消息對象.

4.把需要傳給主線程的信息放到消息對象中.

5.通過handler.sendmessage方法發送消息給主線程.


然後主類的handlemessage方法就會接收到worker thread 線程中發送來的消息..


基本運行原理
handler把消息放入到messagequeue隊列中去.
looper不斷的向外取出消息對象.
交給產生message的handler進行處理.

在就是通過 main thread 向 worker thread 中 發送消息.
1.在work thread 中初始化handler對象,並覆蓋它的handlemessage()方法.
2.在主線程的監聽器中,過去一個消息對象.
3.把需要傳個worker thread 的消息放到對象中.
4.通過handler.sendmessage方法發送消息給worker thread

需要注意的是,worker thread 線程中的處理時, 一定要
先準備 Looper.prepare();
在生成handler對象.
然後調用Looper.loop();方法.不斷從消息隊列中取出消息.就可以了.


下面附帶主要代碼.
傳送消息給worker thread, 下面是 run()方法的內容
public void run() {
			//準備looper對象
			Looper.prepare();
			//在workerthread當中生成一個handler對象
			handler = new Handler(){
				@Override
				public void handleMessage(Message msg) {
					System.out.println("收到OnClick:"+ Thread.currentThread().getName());
				}
			};
			//調用looper的loop()方法之後,looper對象將不斷的從消息隊列中取出
			//消息對象.然後調用handler的handleMessage方法來處理消息如果消息隊列沒有對象,則該線程阻塞
			Looper.loop();
		}

這個是主線程的類.
	class MyHandler extends Handler {

		@Override
		public void handleMessage(Message msg) {
			String s = (String)msg.obj;
			System.out.println("當前線程名:" + Thread.currentThread().getName());
			tv1.setText(s);
		}
		
	}
	

這個是worker thread 傳送消息給主類, 主類的消息隊列獲得消息後傳送個myHandler類中的方法 handleMessage

	class NetworkThread extends Thread {
		
		public void run() {
			System.out.println("當前線程名:" + Thread.currentThread().getName());
			try {
				Thread.sleep(2 * 1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			String s = "從網絡當中獲取的數據";
			Message msg = handler.obtainMessage();
			msg.obj = s;
			handler.sendMessage(msg);
		}
	}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章