Android HandlerThread详解

作者: 千涯秋瑟 | 来源:发表于2017-12-04 22:29 被阅读0次

    一、handlerThread是什么

    1、handlerThread产生背景

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

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

    2、handlerThread 的特点

    (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线程。

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

    二、handlerThread源码解析

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

    参考资料:

    handlerThread源码解析

    handlerThread用法

    相关文章

      网友评论

        本文标题:Android HandlerThread详解

        本文链接:https://www.haomeiwen.com/subject/zzvxixtx.html