HandlerThread的产生背景
一般我们想要执行耗时操作都会想开启Thread子线程去处理,但是多次创建和销毁线程是很耗系统资源的。为了解决这一问题,我们可以自己构建一个循环线程,在线程当中创建一个Looper轮循器,来进行消息的轮循, 当有耗时任务需要投放到该循环线程时,线程就会执行耗时任务,任务执行完成之后,线程又会处于阻塞等待状态,不会马上销毁掉,直到下一个耗时任务被投放进来;即通过阻塞和等待来保证性能最优,为此Google为我们封装好了HandlerThread框架。
HandlerThread是什么
HandlerThread本质上就是一个Thread子线程,不同的是在Thread内部有一个Looper开启了轮循器;
HandlerThread = Handler + Thread + Looper
由于一般的Thread没有开启Looper轮循器,所以不能在子线程中创建handler,因为没有对应的MessageQueue与handler相关联,而MessageQueue是由Looper进行维护的;如果想在子线程中创建handler,必须先通过Looper.prepare()创建一个Looper,再通过Looper.loop()开启循环,才能使用Handler。
HandlerThread的特点
1、HandlerThread本质上是一个线程类,继承了Thread;
2、HandlerThread有自己的内部Looper对象,可以进行loop循环;所以在HandlerThread中可以创建handler来发送和处理消息;
3、通过获取HandlerThread的Looper对象传递给Handler,可以在handleMessage()中执行异步操作;
4、handler中的looper默认绑定了UI线程的MessageQueue,对于非UI线程想使用MessageQueue机制的,HandlerThread的内部Looper最适合,它不会干扰和阻塞UI线程,减少了对性能的消耗,但是处理效率低;
5、HandlerThread是一个串行队列,会比较稳定;
网友评论