Message
Message定义了一个可发送给Handler的包含任意对象的消息。
注意事项:虽然Message包含一个public的构造函数,获取Message对象的最好办法是通过Message.obtain()或者Handler.obtainMessage()
获取,因为这两个方法是从一个可回收的消息池中获取消息的
Looper
为了帮线程运行消息而设计的一个类。Thread默认没有消息循环。在Thread中调用Looper.prepare()开始执行循环,调用Looper.loop() 处理消息。android主线程默认创建好了一个Looper,所有的UI操作都在主线程中。
下面是在一个线程中使用Looper和实例化Handler的例子:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
MessageQueue
MessageQueue包含一个可被Looper对象分发的Message列表。Message并不是直接添加到消息队列中的,而是通过一个与Looper有关联的Handler对象添加的。
通过 Looper.myQueue()方法可以获取当前线程的消息队列。
Handler
Handler允许我们为线程的MessageQueue发送和处理消息和Runnable对象。
当为您的应用程序创建一个进程时,其主线程专用于运行一个消息队列,该消息队列负责管理顶级应用程序对象(活动,广播接收器等)及其创建的任何窗口。我们可以在创建我们自己的线程,并且子线程可以通过Handler与主线程交互。