HandlerThread继承于Thread,所以本质上HandlerThread的对象自己就是一个线程,只不过多了一个looper,可以在自己的线程里分发和处理消息。
Looper:每个线程只有一个looper实例,每个实例只有一个MessageQueue,用来存放消息和事件。首先需要调用prepare()初始化,然后Looper.loop()不断地从MessageQueue里取出Message执行。
MessageQueue:存放Handler发送的消息,是个消息队列。里面存放的都是Handler通过调用sendMessage()发来的消息。
Handler:引用当前线程里的looper和MessageQueue,负责Message的发送和处理,所以Handler应该由处理消息的线程创建。需要在Handler里实现handleMessage(Messagemsg),msg.target.dispatchMessage(msg)最终调用的方法。多个Handler可以共享一个同一个Looper。
使用Handler和Looper:
1. 调用Looper.prepare()初始化Looper
2. 调用Looper.loop(),实际是个不断读取MessageQueue的死循环。
3. Handler在构造时已经通过Looper.myLooper()获取了当前线程的Looper实例,在使用的时候调用sendMessage(Message msg)为MessageQueue添加消息。
4. Looper会不断从MessageQueue中读取消息,然后再回调创建这个消息的Handler中dispatchMessage方法。这个方法最后的实现就是在Handler里实现(重写):handleMessage(Message msg)
使用HandlerThread:
1. 创建一个HandlerThread对象(new一个出来),并且调用start()方法初始化
2. 拿到它的Looper,通过调用这个对象的getLooper()方法
3. 创建一个Handler,以刚拿到这个Looper为参数:new Handler(current_looper)
4. 退出时调用HandlerThread对象的quit()方法
Looper:每个线程只有一个looper实例,每个实例只有一个MessageQueue,用来存放消息和事件。首先需要调用prepare()初始化,然后Looper.loop()不断地从MessageQueue里取出Message执行。
MessageQueue:存放Handler发送的消息,是个消息队列。里面存放的都是Handler通过调用sendMessage()发来的消息。
Handler:引用当前线程里的looper和MessageQueue,负责Message的发送和处理,所以Handler应该由处理消息的线程创建。需要在Handler里实现handleMessage(Messagemsg),msg.target.dispatchMessage(msg)最终调用的方法。多个Handler可以共享一个同一个Looper。
使用Handler和Looper:
1. 调用Looper.prepare()初始化Looper
2. 调用Looper.loop(),实际是个不断读取MessageQueue的死循环。
3. Handler在构造时已经通过Looper.myLooper()获取了当前线程的Looper实例,在使用的时候调用sendMessage(Message msg)为MessageQueue添加消息。
4. Looper会不断从MessageQueue中读取消息,然后再回调创建这个消息的Handler中dispatchMessage方法。这个方法最后的实现就是在Handler里实现(重写):handleMessage(Message msg)
使用HandlerThread:
1. 创建一个HandlerThread对象(new一个出来),并且调用start()方法初始化
2. 拿到它的Looper,通过调用这个对象的getLooper()方法
3. 创建一个Handler,以刚拿到这个Looper为参数:new Handler(current_looper)
4. 退出时调用HandlerThread对象的quit()方法