Handler原理核心点笔记


      1.在Looper中prepare()用于创建一个ThreadLocal对象,并存放一个Looper实例,并且prepare()方法只能代用一次,多次调用会出异常,所以一个线程只有一个Looper对象,创建一个MessageQueque对象,用 于存放Message。


      2.Looper.loop()为一个无限循环,不断的从MessageQueque中获取消息,并且调用msg.target.dispatchMessage()      方法进行消息分发,dispatchMessage()会调用handlerMessage(Message message)接口进行更新UI。


      3.Handler在初始化的时候会调用ThreadLocal.get()获取Looper实例,所以prepare()方法必须在Handler初始化之前调用。


      4.Handler.sendMessage(Message msg)会给传入的msg内容加上当前Handler的引用,就是msg.target=this,然后再将Message放入MessageQueque。在步骤2中的msg.target就是在此时传入的。

      

     5.Activity在使用Handler的时候不用调用prepare(),loop()是因为在ActivityThread中已经调用,所以如果要在子线程中新建一个Handler就必须先调用prepare(),loop();

     

     总结:线程间通信就是一个阻塞队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值