一、Handler类的作用
由于主线程只能处理UI相关的事件,比如说按键、用户触屏以及屏幕绘图事件等。所以当我们处理比较耗时的任务的时候,需要另起线程。但是Android规定,只有主线程能够修改Activity里面的UI组件,这样就会导致我们新起的线程中无法动态改变UI组件的属性值。为了处理Android中多线程的问题,我们就借助Handler类来处理了。
所以说Handler类的作用主要有两个:1是在新线程中发送消息;2是在主线程中获取、处理消息。
对于开发者来说,我们只需要重写Handler中的handleMessage(Message msg)方法就可以了,当新线程启动线程发送消息的时候,消息会发送到与之关联的MessageQueue队列中,然后Handler就会不断从MessageQueue中取出消息然后执行handleMessage()方法,这就会导致Handler类中的handleMessa()方法被回调。
二、Handler类工作的原理
首先我们来认识一下Looper、Message、MessageQueue这三个东西。
1.Looper:每个线程有且只能拥有一个Looper。它的loop方法负责读取MessageQueue中的消息,读到信息之后就把消息交给发送该消息的Handler进行处理了。
2.Message:Handler接收和处理的消息对象。
3.MessageQueue:消息队列,它采用的是先进先出的方式进行管理Message。程序创建Looper对象的时候会在它的构造器中创建MessageQueue对象。
我们知道Handler的作用有两个:发送消息和处理消息。当程序使用Handler发送消息的时候,被Handler发送的消息就会送到指定的MessageQueue队