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);