Android HandlerThread详解

一、handlerThread是什么

1、handlerThread产生背景

Android HandlerThread详解_第1张图片

handlerThread就是handler+thread+looper的框架,他是一个thread,内部实现了一个looper消息循环。


因为HandlerThread拥有自己的消息队列,它不会干扰或阻塞UI线程,比较合适处理那些需要花费时间偏长的任务。我们只需要把任务发送给HandlerThread,然后就只需要等待任务执行结束的时候通知返回到主线程就好了。


2、handlerThread 的特点

Android HandlerThread详解_第2张图片

(1)HandlerThread将loop转到子线程中处理,目的就是分担MainLooper的工作量,降低了主线程的压力,使主界面更流畅。

(2)开启一个线程起到多个线程的作用。处理任务是串行执行,按消息发送顺序进行处理。HandlerThread本质是一个线程,在线程内部,代码是串行处理的。

(3)但是由于每一个任务都将以队列的方式逐个被执行到,一旦队列中有某个任务执行时间过长,那么就会导致后续的任务都会被延迟处理。

(4)HandlerThread拥有自己的消息队列,它不会干扰或阻塞UI线程。

(5)对于网络IO操作,HandlerThread并不适合,因为它只有一个线程,还得排队一个一个等着。

android系统提供的Handler类内部的Looper默认绑定的是UI线程的消息队列,对于非UI线程又想使用消息机制,只能自定义一个线程,在线程run()方法中,通过 Looper.prepare();Looper.loop();来开启Looper和消息队列,其实就是Google攻城狮给我实现好的HandlerThread,HandlerThread绑定的是它自己的消息队列,它不会干扰或阻塞UI线程。


Android HandlerThread详解_第3张图片

handlerThread使用的是当前线程的Looper。

Android HandlerThread详解_第4张图片


Android HandlerThread详解_第5张图片

二、handlerThread源码解析


handlerThread 有自己的消息循环,所以不会占用UI线程的消息循环和队列。

Android HandlerThread详解_第6张图片


参考资料:

handlerThread源码解析

handlerThread用法

你可能感兴趣的:(Android HandlerThread详解)