Handler 消息机制分析

Handler消息分析

ThreadLocal sThreadLocal =new ThreadLocal();
是什么鬼,存放数据的工具,当前线程存放的数据,别的线程获取不到
这个类提供get和set方法,比如在A线程中sThreadLocal.set("value");B线程中打印 sThreadLocal.get();打印出来为空。原因这边博文上分析得很清楚:
http://blog.csdn.net/singwhatiwanna/article/details/48350919

关于 Handler Looper 以及MessageQueue的关系:
hreadLocal中存放Looper对象,每个Looper对象绑定得有一个MessageQueque。
通常handler对象在创建的时候会创建looper以及messageQueue,在ui线程中,这个创建的方法已经自动创建了,所以通常我们不去创建。而如果handler对象在子线程中则需要调用Looper.prepare();

Looper够构造器
private Looper(){
      mQueue=new MessageQueue(); //可看出创建looper对象时也创建了messageQuere()对象
      mRun=true;
     mThread=Thread.currentThread();
}

Looper的prepare方法
public static final void prepare(){
if(sThreadLocal.get()!=null){
throw new RuntimeException("Only one Looper may be created per thread");
}
sThreadLocal.set(new Looper());//线程中调用Looper.prepare();方法时创建了looper,这里的looper对象存放在sThreadLocal中,独立属于当前线程
}

Looper的方法源码 使用先进先出的方式去读取messagequeue中的消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值