1、handler是什么?
handler是Android给我们用来更新ui的一套机制,也是一套消息处理机制,
我们可以发消息,也可以通过它处理消息。
activity的生命周期的方法也是通过handler来回调的。
2、不用handler机制可以吗?
不行,Android在设计的时候,就封装了一套消息创建,传递,处理机制,如果不遵循
这样的机制,就没办法更新ui信息,就会抛出异常。
不用,就要自己写一套消息处理机制,较为复杂。
3、Android为什么要设计只能通过Handler机制跟新UI呢?
最根本的目的就是解决线程并发问题,
假设如果在一个Activity中,有多个线程去更新ui,并且没有加锁机制,
那么会产生什么问题呢?
更新界面错乱
如果对更新UI的操作都进行枷锁处理又会产生什么问题?
性能下降
所以我们遵循handler机制就可以了
4、handler的原理是什么?
一、handler封装了消息的发送(主要包括消息发送给谁)
Looper
1)内部包含了一个消息队列也就是MessageQueue,所有handler发送的
消息都是走向这个消息队列
2)Looper.Looper方法,就是一个死循环,不断的从MessageQueue里面
取消息,如果有消息就处理消息,没有消息就阻塞。
二、MessageQueue就是一个消息队列,可以添加消息,并处理消息
三、handler内部跟Looper进行关联,也就是说在Handler内部可以找到Looper,
找到了Looper也就找到了MessageQueue,在handler中发送消息,其实就是向
MessageQueue队列中发送消息。
总结一下就是:
handler负责发送消息,
Looper负责接收handler发送的消息,直接把消息回传给handler自己。
MessageQueue就是一个存储消息的容器
我自己的理解是
handler------MessageQueue-----Looper-----回传给handler
handler发消息到MessageQueue
Looper从MessageQueue拿到消息,并回传给handler
关于Looper循环参考
https://blog.csdn.net/lyz_zyx/article/details/80543787
参考视频:
https://www.imooc.com/learn/267
源码下载:
https://download.csdn.net/download/zhaihaohao1/10650382