您的位置:首页 > 产品设计 > UI/UE

android Thread HandlerThread Looper Message MessageQueue Handler的关系

2016-09-06 14:51 666 查看
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出队列的时候,就执行该消息。

[code]post(Runnable)
,
postAtTime(Runnable, long)
,
postDelayed(Runnable, long)
,是用来处理runnable对象的;[/code]
[code]sendEmptyMessage(int)
,
sendMessage(Message)
,
sendMessageAtTime(Message, long)
, and
sendMessageDelayed(Message, long)方法是
[/code]
用来处理Message对象,一般是立即执行的,但是我们是可以设置时延,还可以循环执行。
[/code]
可以通过handleMessage (Message msg) 方法来接收消息。

实例化:Handler(Looper looper) 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: