使用消息队列可以完成主线程和子线程之间的消息传递,完成他们就需要使用Looper、Message和Handler类。
3个类的关系就像上图一样。Looper<===>提供消息队列的集合,消息通过Handler增加和取出。操作Handler的对象就是UI Thread和子线程。
1.消息类:Message
android.os.Message的主要功能是进行消息的封装,同时可以指定消息的操作形式,Message类定义的变量及常用方法有:
1.public int what 变量类型 用于定义此Message属于何种操作
2.public Object obj 变量类型 用于定义此Message传递的信息数据
3.public int arg1 变量类型 传递一些整型数据时使用,一般很少使用
4.public int arg2 变量类型 传递一些整型数据时使用,一般很少使用
5.public Handler getTarget() 普通类型 取得操作此消息的Handler对象
Message类中,使用最多的是what和obj两个变量,往往我们会通过what变量指明一个Message所携带的是何种信息,而通过obj传递信息。
2.消息操作类:Handler
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。