HandlerThread

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()方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值