一、HandlerThread的使用

//创建实例对象
HandlerThread handlerThread=new HandlerThread("thread_handler");
//开启循环
handlerThread.start();
//创建handler,looper使用的是handlerThread的looper
Handler handler=new Handler(handlerThread.getLooper()){@Overridepublic void handleMessage(Message msg) {//工作线程中处理问题super.handleMessage(msg);}};//发送消息
handler.sendEmptyMessage(0);//结束线程,停止消息循环
handlerThread.quit();

二、HandlerThread的源码分析

1、HandlerThread是Thread的子类,线程类

public class HandlerThread extends Thread {int mPriority;int mTid = -1;Looper mLooper;private @Nullable Handler mHandler;public HandlerThread(String name) {super(name);mPriority = Process.THREAD_PRIORITY_DEFAULT;}

2、当我们调用start方法后,HandlerThread会执行run方法,run方法创建当前线程的Looper,并把创建的looper赋值给成员变量mLooper.

    @Overridepublic void run() {mTid = Process.myTid();Looper.prepare();synchronized (this) {mLooper = Looper.myLooper();notifyAll();}Process.setThreadPriority(mPriority);onLooperPrepared();Looper.loop();mTid = -1;}

3、初始化Handler的时候,把工作线程的looper作为参数传入,所以handler就能操作工作线程looper和messageQueue,创建完handler实例,就可以发送消息了。

 Handler handler=new Handler(handlerThread.getLooper()){@Overridepublic void handleMessage(Message msg) {//工作线程中处理问题super.handleMessage(msg);}};

这里HandlerThread的getLooper方法,当判断当前线程的Looper还没创建后(就是还没有调用线程的start()),他会阻塞当前线程。

 public Looper getLooper() {if (!isAlive()) {return null;}// If the thread has been started, wait until the looper has been created.synchronized (this) {while (isAlive() && mLooper == null) {try {wait();} catch (InterruptedException e) {}}}return mLooper;}

4、当不想使用工作线程了,需要停止消息循环,这一步必须,否则工作线程的looper一直运行。

handlerThread.quit();
handlerThread.quitSafely();

三、Handler,Thread,HandlerThread的区别

  • Handler在Andorid中负责发送和处理消息,通过它可以实现工作线程和主线程的消息通讯。
  • Thread  线程,是CPU调度和分配的基本单位
  • HandlerThread   一个继承自Thread类的HandlerThread,run方法中创建了工作线程的Looper,可以用于工作线程的消息循环

HandlerThread的解析相关推荐

  1. 面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThread?

    前言 有些同学老问我,快要校招了 今年的金三银四退成了金四银五了,我改准备哪些知识点去面试复习,然而要准备的知识点很庞大,今天要讲的知识其中之一.一篇关于HandlerThread的解析 文档笔记~ ...

  2. 秋招 百度二轮面试---血淋淋的经历写实

    一名自信向上的良好青年,参加百度面试被面试官按在地板来回摩擦~ 简单回顾一下,面试的经历吧 百度二面对话大概是这样的. 面:这个知道吗? 我:不知道. 面:这个呢? 我:不知道. 面:那我问你这个吧. ...

  3. Android线程,线程池使用及原理博文参考

    2019独角兽企业重金招聘Python工程师标准>>> 还是先回顾下Handler消息机制的原理图: 同样的还是先看看一篇对<Android开发艺术探索>的总结,对线程和 ...

  4. 2018 秋招 百度二轮面试---血淋淋的经历写实

    2017 秋招 百度二轮面试-血淋淋的经历写实 一名自信向上的良好青年,参加百度面试被面试官按在地板来回摩擦~(不知是哪位好汉说的,借用一下) 简单回顾一下,下午的经历吧 下午百度二面对话大概是这样的 ...

  5. 百度java面试应届,秋招 百度二轮面试---血淋淋的经历写实

    一名自信向上的良好青年,参加百度面试被面试官按在地板来回摩擦~ 简单回顾一下,面试的经历吧 百度二面对话大概是这样的. 面:这个知道吗? 我:不知道. 面:这个呢? 我:不知道. 面:那我问你这个吧. ...

  6. 2017常见android面试题

    介绍自己负责的部分,如何实现的. 框架的搭建 排查问题以及结解决方式 兼容性保证 性能优化 上线之后模块导致crash的比例 自定义view viewGroup 这个就是约定的几个方法,onMeasu ...

  7. 搜集整理的一些博客导航

    简介:第一次在CSDN上发表博客,将自己关注或者看过的一些博客整理了一下,其中包含了鸿神和郭神的全部博客,包括两位大神微信公众号推荐的博客,另外还有一些安卓开发社区的博客,后续每天都会更新这个导航,希 ...

  8. Android(2017-2018)BAT面试题整理(Android篇,含答案)

    1.四大组件  - Activity  Activity详细总结 - 简书  - Service  Carson带你学Android:一份全面 & 简洁的 Service 知识讲解攻略 - 简 ...

  9. Android伸手党系列之六:Android开发进阶

    这是android伸手党知识收集系列的第六篇,来整理android开发进阶相关知识:Window,View,事件分发,NFC,蓝牙等. Android View 简介 View的简介 那些你应该知道却 ...

最新文章

  1. OpenCV error: Cannot load info library for OpenCV
  2. 查询Linux系统网卡流量负载,超好用linux系统查询网卡等流量参数的工具,分享给大家!!!...
  3. 及时沟通的重要性_沟通与代码同样重要
  4. python 共享数据_用Python共享全局数据
  5. 机房线路故障,引发多家公司不能上网,和自己de经历有感
  6. 华为P30 Pro终极渲染图曝光:后置徕卡四摄颜值出众
  7. editor.md实现拖拽剪切复制粘贴上传图片,文件插件
  8. 转载 hashtable和dictionary的区别
  9. 2019一注结构成绩_2019年福建地区计算机考研汇总分析
  10. Java SE 和 Java EE 的区别
  11. Jquery(十)jqueryUI常用功能实战
  12. 排队论----学习反馈
  13. ES6重要知识点总结
  14. Inception(盗梦空间)及代码实现
  15. Proximal Policy Optimization近端策略优化(PPO)
  16. 香港城大:首创3D打印磁控微型机器人技术,推动人体送药研究发展
  17. 天梯赛题目练习——平面向量加法(附带PTA测试点)
  18. 们指点如果在android平台下开启jbox2d的debugDraw功能
  19. python正则表达式详解compile_python正则表达式详解
  20. Matlab车牌识别

热门文章

  1. java通过thrift连接hbase查询数据
  2. css 多层ul li,css中的ul li ul li ul li ul li 实现四级菜单
  3. 易基因:NAR:ChIP-seq等揭示蛋白质酰基化与c-di-GMP协同调控放线菌发育与抗生素合成机制|项目文章
  4. 常用的git分支管理方法都在这了
  5. php_extension moodle,[转载]PHP  Moodle二次开发
  6. Pet Store安装ok
  7. 收到一封CTO来信,邀约面试机器学习工程师
  8. html + css + javascript 写的程序员表白代码
  9. 1.5计算机性能评测
  10. 基于kurento-one2many二次开发实现多房间直播+共享桌面+切换摄像头+聊天互动