2、final boolean hasMessages(int what):检查消息队列中是否包含what属性为指定值得消息。
3、final boolean hsaMessages(int what,Object object):检查消息队列中是否包含what属性为指定值且object属性为指定对象的消息。
4、多个重载的 Message obtainMessage():获取消息。
5、sendEmptyMessage(int what):发送空消息。
6、final boolean sendEmptyMessageDelayed(int what,long delayMills):指定多少毫秒之后发送空消息。
7、final boolean sendMessage(Message msg):立即发送消息。
8、final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后发送消息。
借助于上面这些方法,程序可以方便地利用Handler 类进行消息传递。
Handler、Loop、MessageQueue的工作原理
为了更好的理解Handler的工作原理,先介绍一下与Handler一起工作的几个组件。
1、Message:Handler 接受和处理的消息对象
2、Looper:每个线程只能拥有一个Looper。它的loop方法负责读取MessageQueue中的消息,读到消息之后就把消息交给发送消息的Handler进行处理。
3、MessageQueue:消息队列,它采用先进先出的方法来管理Message。程序创建Looper对象时会在它的构造器中创建Looper对象。Looper 提供的构造器源代码如下:
private Looper()
{
mQueue=new MessageQueue();
mRun=true;
mThread=Thread.currentThread();
}
该构造器使用了 private 修饰,表明程序员无法通过构造器创建Looper对象。从上面的代码中不难看出,程序在初始化Looper时会创建一个与之关联的 MessageQueue ,这个MessageQueue就负责管理消息。
1、Handler:它的作用有两个——发送消息和处理消息,程序使用Handler发送消息,被Handler发送的消息必须被送到指定的MessageQueue。也就是说,如果希望Handler正常工作,必须在当前线程中有一个MessageQueue,否则消息就没有MessageQueue进行保存了。不过MessageQueue是由Looper负责管理的,也就是说,如果希望Handler正常工作,必须在当前线程中有一个Looper对象,为了保证当前线程中有Looper对象,可以分如下两种情况处理。










