面试常客Handler详细解析(Handler与Looper、MessageQueue的关系)(二)

Handler与Looper、MessageQueue的关系:

Android为什么要设计只能通过Handler机制更新UI呢?
最根本的目的就是解决多线程并发问题,
假设如果在一个activity当中,有多个线程去更新UI,并且都没有加锁机制,那么会产生什么样子的问题? –》 更新界面错乱

如果对更新UI的操作都进行加锁处理的话又会产生什么样子的问题?–》
性能下降

出于对以上问题的考虑,Android给我们提供了一套更新UI的机制,我们只需要遵循这样的机制就可以了,根本不用去关心多线程问题,所有的更新UI操作,都是在主线程的消息队列当中去轮询处理的。

Handler封装了消息的发送(主要包括消息发送给谁(一般是发送给handler自己))
Looper
内部包含一个消息队列也就是MessageQueue,所有的Handler发送的消息都走向这个消息队列
Looper.Looper方法,就是一个死循环,不断的从MessageQueue取消息,如果有消息就处理消息,没有消息就阻塞

MessageQueue,就是一个消息队列,可以添加消息,并处理消息

Handler也很简单,内部会跟Looper进行关联,也就是说在Handler的内部可以找Looper,找到Looper,也就找到了MessageQueue,在Handler中发送消息,其实是向MessageQueue队列中发送消息

总结:handler负责发送消息,looper负责接收handler发送的消息,并直接把消息回传给handler自己,MessageQueue就是一个存储消息的容器

Handler的原理是什么?
图解

 我的Leader(其实是Looper对象)                  我(也就是Handler对象)
                                          ( Handler的sendMessage的操作)
                                           第一步:  我要上厕所

         第二步: 去吧

(Looper.Looper操作,并把消息回传给我)

                                                 第三步:我去上厕所
                                                   (handler的handleMessage方法)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值