1、handler是什么?
handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以通过它来发送消息,也可以通过它来处理消息。
2、为什么要使用handler ?
Android在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没有办法更新UI信息,就会抛出异常。
3、handler的使用方法
sendMessage()
sendMessageDelayed()
post(Runnable)
postDelayed(Runnable,long)
removeCallBack(Runnalbe)
4、在非UI线程中更新UI 报错 E/AndroidRuntime(518): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
5、Android为什么要设计只能通过Handler机制跟新UI呢?
最根本的目的就是解决多线程并发问题
假设如果在一个Activity当中,有多个线程去更新UI,并且都没有加锁机制,那么会产生什么问题?
1、 跟新界面错乱
如果对更新UI的操作都进行加锁处理的话又会产生什么问题?
2、性能下降
处于对以上目的的内容的考虑,Android给我们提供了一套更新UI的机制,我们只需遵循这样机制就可以了。
3、根本不用关心多线程的问题,所以更新UI的操作,都是在主线程的消息队列中去轮询处理的。
6、handler的原理是什么?
一、Handler封装了消息的发送(主要包括消息发送给谁)
Looper
1、内部包含一个消息队列也就是MessageQueue,所有的Handler发送的消息都走向这个消息队列。
2、Looper :Looper方法就是一个死循环,不断的从MessageQueue取消息,如有消息,就处理消息,没有消息就阻塞。
二、MessageQueue 就是一个消息队列,可以添加消息,并处理消息
三、Handler也很简单,内部会跟Looper进行关联,也就是说在Handler的内部可以找到Looper,找到了Looper也就找到了MessageQueue,在Handler中发送消息,其实就是向MesageQueue队列中发送消息。
总结:handler负责发送消息,Looper负责接收Handler发送的消息,并直接把消息回传给handler自己。MessageQueue就是一个存储消息的容器。