Handler详解(总结篇)

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就是一个存储消息的容器。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值