1. 作用 :获取子线程的looper,使用该looper初始化handler时可以获取子线程的handler对象
  2. 用法
    1. HandlerThread mHanderThread = new HandlerThread("threadName");
    2. mHanderThread.start();//获取位于新线程的Looper对象
    3. Handler mHander = new Hander(mHandlerThread.getLooper());//至此创建了一个子线程处理任务的Handler对象,可以在此mHandler中处理耗时任务
  3. HandlerThread方法里面最后退出释放资源有两个方法,分别是quit()和quitSafely(),下面看一下这两个方法的区别:由HandlerThread源码可知这两个方法最终分别调用了MessageQueue里面的以下两个方法
    private void removeAllMessagesLocked() {Message p = mMessages;while (p != null) {Message n = p.next;p.recycleUnchecked();p = n;}mMessages = null;
    }
    private void removeAllFutureMessagesLocked() {final long now = SystemClock.uptimeMillis();Message p = mMessages;if (p != null) {if (p.when > now) {removeAllMessagesLocked();} else {Message n;for (;;) {n = p.next;if (n == null) {return;}if (n.when > now) {break;}p = n;}p.next = null;do {p = n;n = p.next;p.recycleUnchecked();} while (n != null);}}
    }

    最终到了MessageQueue的removeAllMessageLocked()和removeAllFutureMessageLocked(),由上面的代码可知,前一个方法删除了所有messageQueue里面的message,后面一个判断了时间,只删除了执行时间大于当前时间的message,也就是说会把delay为0以及当前需要执行的message执行完。

  4. 总结:
           HandlerTheard继承自 Thread类,并创建位于该线程的Looper对象,提供了getLooper()方法来获取创建的looper对象,以及quit()和quitSafely()两个方法退出并释放messageQueue队列 ,注意run()方法里面的notifyAll和getLooper方法里面的wait。解决了多线程操作的线程同步问题,因为getLooper是在一个线程调用而run方法是在另一个线程调用,getLooper方法执行时如果run方法没有执行则进入wait等待,直到run方法中looper初始化完毕唤醒该方法。

HandlerThread详解相关推荐

  1. 【Android】HandlerThread详解

    之前总结过Android Handler.Looper.Message.MQ的知识点,我们翻看源码的时候,看到一个关键类HandlerThread,当时还提出过疑问,这个和Thread有什么区别.本节 ...

  2. java handlerthread_Android HandlerThread 详解 - huansky - 博客园

    首先是 DownloadThread类,继承于 HandlerThread,用于下载. public class DownloadThread extendsHandlerThread{private ...

  3. java handlerthread_Android中HandlerThread详解

    源码分析/** Copyright (C) 2006 The Android Open Source Project** Licensed under the Apache License, Vers ...

  4. Android-HandlerThread详解

    HandlerThread详解 抛砖引玉 在说HandlerThread之前,先看下这个. mHandler.removeCallbacksAndMessages(null); 进去这个函数看下 pu ...

  5. Android 多线程之HandlerThread 完全详解

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52426353 出自[zejian的博客] 关联文章: Android ...

  6. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

  7. android message 代码,Android Handler移除Message详解及实例代码

    Android Handler移除Message详解 问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能 ...

  8. android任务 进程 线程详解,Android任务、进程、线程详解

    singleTop模式,基本上于standard分歧,仅正在请求的Activity反好位于栈顶时,无所区别.此时,配放成singleTop的Activity,不再会构制新的实例加入到Task栈外,而是 ...

  9. Android App优化之ANR详解

    引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App ...

最新文章

  1. Java运行作业控制语言_Java安全——语言本身的设计
  2. 【转】测试思考——测试人员需要具备哪些素质?
  3. Java线程状态分析
  4. php的两种复合数据类型是什么意思_2.4PHP复合数据类型:数组和对象
  5. Android开发性能优化大总结
  6. 单链表的归并算法思路总结
  7. redis数据类型之hash入门
  8. 在ASP.NET 2.0中操作数据:使用FormView 的模板
  9. [转]让内网MOSS门户也用域名访问
  10. android studio: 让项目通过阿里云 maven jcenter 下载依赖资源
  11. Atitit oracle新特性5 6 7 8 9 10 11 12 18 19 20 attilax总结 目录 1.1. :ora 20c 1 1.2. Oracle Database 19c 的
  12. pl/sql如何使用
  13. 大型电商数据库设计与分析
  14. java开发程序员前景_java程序员的发展前景如何
  15. Flink中的时间和窗口 完整使用 (第六章)
  16. 如何使用纯 CSS(border-radius 和 clip)属性画出半圆
  17. 路由器开启IPv6的方法
  18. 掘金 Web 沸点优化 1.1 版本上线啦~
  19. 隔行扫描, 逐行扫描
  20. HTML5基本元素使用

热门文章

  1. C#桌面办公应用-工资管理系统系列四
  2. java pattern.quote_Java Pattern quote(String)用法及代码示例
  3. HDUOJ 2042不容易系列之二
  4. USENIX Conference
  5. pip 安装报错的超时问题
  6. 六、FFmpeg使用---ffmpeg依赖x264库
  7. 利用python编写一个pc模拟器明日方舟脚本_明日方舟脚本1.0(python\adb\cv2)
  8. 产品分析的方法--SWOT分析
  9. 德州仪器达芬奇五年之路七宗罪,嵌入式处理器架构之争决战2012
  10. Mysql学习笔记2-提示符+创建(摘自慕课)