1,MessageQueue与Message的关系
Message中文是消息,及线程处理的最小单元,里面带有处理的数据集,或还带有操作,及告诉目的地要做什么事情, 每个MessageQueue里包含有Message。每个Message不是直接插入到MessageQueue里的,而是通过MessageQueue.IdleHandler 与looper一起工作,把Message放到MessageQueue里,及addIdleHandler(MessageQueue.IdleHandler handler) 和removeIdleHandler(MessageQueue.IdleHandler handler) 方法,把MessageQueue.IdleHandler压入到MessageQueu里。
2,Thread和HandlerThread的关系
HandlerThread就是带有Looper循环的Thread.
3,Looper介绍
Looper即一个循环,必须绑定到一个固定的线程里,通过getThread()方法可以获得该looper绑定的Thread对象,通过getMainLooper()获得主线程里的looper对象,myLooper()可以获得当前线程里的looper对象,通过myQueue()方法可以获得当前线程里的messageQueue对象。
4,Thread、HandlerThread、和Looper的关系的关系
一般声明一个thread是没有带looper循环的,但是可以通过Looper.prepare()方法给一个线程加上looper;Looper.loop()执行该looper绑定的线程里的messageQueue,直到该loopger结束;Loop.quit()结束该循环,实例代码如下:
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();
}
}
幸好android为我们提供了一个直接生成带有looper线程的方法,及实例化一个HandlerThread对象,通过HandlerThread.getLooper()方法即可获得该HandlerThread的looper对象。
5,Handler和Thread HandlerThread Looper Message MessageQueue的关系
Handler类是用来发送和处理消息/Runnable的类,一个Handler类与唯一的一个线程关联,并且该线程是生成该Handler的线程,
它把消息发送到该生成它的线程里的MessageQueue里,然后当Message出队列的时候,就执行该消息。
post(Runnable)
, postAtTime(Runnable, long)
, postDelayed(Runnable, long)
,是用来处理runnable对象的;
sendEmptyMessage(int)
, sendMessage(Message)
, sendMessageAtTime(Message, long)
, and sendMessageDelayed(Message, long)方法是
用来处理Message对象,一般是立即执行的,但是我们是可以设置时延,还可以循环执行。
可以通过handleMessage (Message msg) 方法来接收消息。
实例化:Handler(Looper looper)