Handler Looper Message

 

Android(1)-Handler Looper Message MessageQueuehtml

http://www.cnblogs.com/TS-qrt/articles/android.htmljava

Android學習筆記——從源碼看Handler的處理機制android

http://www.cnblogs.com/yjiyjige/p/3145052.htmlide

一:發送:oop

MyHandler myHandler = new MyHandler(handlerThread.getLooper()); 
 Message msg = myHandler.obtainMessage(); 
 //將msg發送到目標對象,所謂的目標對象,就是生成該msg對象的handler對象 
 Bundle b = new Bundle(); 
 b.putInt("age", 20); 
 b.putString("name", "Jhon"); 
 msg.setData(b); 
 msg.sendToTarget();  //將msg發送到myHandler學習

接收:線程

@Override
 public void handleMessage(Message msg) { 
     Bundle b = msg.getData(); 
     int age = b.getInt("age"); 
     String name = b.getString("name"); 
     } 
 } code

2、Handler sendMessage 與 obtainMessage (sendToTarget)比較 :htm

http://www.cnblogs.com/android007/archive/2012/05/10/2494766.html  寫的很好!對象

總結: Message message = Message.obtain();
  message.arg1 = 1;
 message.arg2 = 2;
 message.obj = "Demo";
 message.what = 3;
 Bundle bundleData = new Bundle();
 bundleData.putString("Name", "Lucy");
 message.setData(bundleData);

3、主線程和子線程之間的消息傳遞 

//創建消息循環的步驟
            Looper.prepare();//一、初始化Looper
            mHandler = new Handler(){//二、綁定handler到CustomThread實例的Looper對象
                public void handleMessage (Message msg) {//三、定義處理消息的方法
                    switch(msg.what) {
                    case MSG_HELLO:
                        Log.d("Test", "CustomThread receive msg:" + (String) msg.obj);
                    }
                }
            };
            Looper.loop();//四、啓動消息循環

http://www.cnblogs.com/jackhuclan/archive/2013/07/10/3182084.html 

主線程向子線程發消息:

一、子線程中定義Handler,Handler定義在哪一個線程中,就跟那個線程綁定,在線程中綁定Handler須要調用Looper.prepare();方法,主線程中不調用是由於主線程默認幫你調用了; 
public class LoopThread implements Runnable {  
  
    public Handler mHandler = null;  
  
    @Override  
    public void run() {  
        Looper.prepare();  
        mHandler = new Handler() {  
            public void handleMessage(Message msg) {  
                String result = NetUtil.getJsonContent("北京");  
                //完成了獲取北京天氣的操做;  
                Log.i("test", "handler"+result);  
            }  
        };  
        Looper.loop();  
    }  
  
}  

其中Looper.prepare();和Looper.loop();維護了一個消息隊列,等待消息注入並在子線程中執行; 
二、主線程中這樣調用: 
LoopThread.mHandler.sendEmptyMessage(0);
相關文章
相關標籤/搜索