Handler Looper Message

100343_jmxe_1389206.jpg

 

100241_SCHa_1389206.png

Android(1)-Handler Looper Message MessageQueue

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

Android学习笔记——从源码看Handler的处理机制

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

一:发送:

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

二、Handler sendMessage 与 obtainMessage (sendToTarget)比较 :

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

三、主线程和子线程之间的消息传递 

          //建立消息循环的步骤
            Looper.prepare();//1、初始化Looper
            mHandler = new Handler(){//2、绑定handler到CustomThread实例的Looper对象
                public void handleMessage (Message msg) {//3、定义处理消息的方法
                    switch(msg.what) {
                    case MSG_HELLO:
                        Log.d("Test", "CustomThread receive msg:" + (String) msg.obj);
                    }
                }
            };
            Looper.loop();//4、启动消息循环

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

主线程向子线程发消息:

1、子线程中定义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();维护了一个消息队列,等待消息注入并在子线程中执行; 
2、主线程中这样调用: 
LoopThread.mHandler.sendEmptyMessage(0);  

 

转载于:https://my.oschina.net/u/1389206/blog/336437

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值