转:Android中的Handler的机制与用法详解
注:Message类的用法:
message的几个参数都可以携带数据,其中arg1与arg2可以携带int类型,what是用户自定义的int型,这样接受者可以了解这个消息的信息.
说明:使用Message类的属性可以携带int类型的数据,如果要携带其他类型的数据,可以先将携带的数据保存到bundle对象中,然后通过Message类的setdata方法
将其添加到Message中.
要注意以下三点:
1.尽管Message有public的默认构造方法,但是通常情况下,需要使用Message.obtain方法或handler.obtainmessage方法来从消息池中获得空消息对象,以节省资源.
2.如果一个Message只需携带简单的int型信息,应该有限使用Message.arg1和arg2,这比bundle更省内存.
3.尽可能使用Message.what来表示信息,以便用不同方式处理Message
概述:
很多android初学者对android 中的handler不是很明白,其实Google参考了Windows的消息处理机制,
在Android系统中实现了一套类似的消息处理机制。在下面介绍handler机制前,首先得了解以下几个概念:
1. Message
消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程。
2. Message Queue
消息队列,用来存放通过Handler发布的消息,按照先进先出执行。
3. Handler
Handler是Message的主要处理者,负责将Message添加到消息队列以及对消息队列中的Message进行处理。
4. Looper
循环器,扮演Message Queue和Handler之间桥梁的角色,循环取出Message Queue里面的Message,并交付给相应的Handler进行处理。
5. 线程
UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。
每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在你的应用程序里,可以定义Handler的子类别来接收Looper所送出的消息。
好了,下面是正文~