HandlerThread详解
- 作用 :获取子线程的looper,使用该looper初始化handler时可以获取子线程的handler对象
- 用法
- HandlerThread mHanderThread = new HandlerThread("threadName");
- mHanderThread.start();//获取位于新线程的Looper对象
- Handler mHander = new Hander(mHandlerThread.getLooper());//至此创建了一个子线程处理任务的Handler对象,可以在此mHandler中处理耗时任务
- 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执行完。
- 总结:
HandlerTheard继承自 Thread类,并创建位于该线程的Looper对象,提供了getLooper()方法来获取创建的looper对象,以及quit()和quitSafely()两个方法退出并释放messageQueue队列 ,注意run()方法里面的notifyAll和getLooper方法里面的wait。解决了多线程操作的线程同步问题,因为getLooper是在一个线程调用而run方法是在另一个线程调用,getLooper方法执行时如果run方法没有执行则进入wait等待,直到run方法中looper初始化完毕唤醒该方法。
HandlerThread详解相关推荐
- 【Android】HandlerThread详解
之前总结过Android Handler.Looper.Message.MQ的知识点,我们翻看源码的时候,看到一个关键类HandlerThread,当时还提出过疑问,这个和Thread有什么区别.本节 ...
- java handlerthread_Android HandlerThread 详解 - huansky - 博客园
首先是 DownloadThread类,继承于 HandlerThread,用于下载. public class DownloadThread extendsHandlerThread{private ...
- java handlerthread_Android中HandlerThread详解
源码分析/** Copyright (C) 2006 The Android Open Source Project** Licensed under the Apache License, Vers ...
- Android-HandlerThread详解
HandlerThread详解 抛砖引玉 在说HandlerThread之前,先看下这个. mHandler.removeCallbacksAndMessages(null); 进去这个函数看下 pu ...
- Android 多线程之HandlerThread 完全详解
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52426353 出自[zejian的博客] 关联文章: Android ...
- Android Telephony分析(三) ---- RILJ详解
前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程. 这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...
- android message 代码,Android Handler移除Message详解及实例代码
Android Handler移除Message详解 问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能 ...
- android任务 进程 线程详解,Android任务、进程、线程详解
singleTop模式,基本上于standard分歧,仅正在请求的Activity反好位于栈顶时,无所区别.此时,配放成singleTop的Activity,不再会构制新的实例加入到Task栈外,而是 ...
- Android App优化之ANR详解
引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App ...
最新文章
- Java运行作业控制语言_Java安全——语言本身的设计
- 【转】测试思考——测试人员需要具备哪些素质?
- Java线程状态分析
- php的两种复合数据类型是什么意思_2.4PHP复合数据类型:数组和对象
- Android开发性能优化大总结
- 单链表的归并算法思路总结
- redis数据类型之hash入门
- 在ASP.NET 2.0中操作数据:使用FormView 的模板
- [转]让内网MOSS门户也用域名访问
- android studio: 让项目通过阿里云 maven jcenter 下载依赖资源
- Atitit oracle新特性5 6 7 8 9 10 11 12 18 19 20 attilax总结 目录 1.1. :ora 20c	1 1.2. Oracle Database 19c 的
- pl/sql如何使用
- 大型电商数据库设计与分析
- java开发程序员前景_java程序员的发展前景如何
- Flink中的时间和窗口 完整使用 (第六章)
- 如何使用纯 CSS(border-radius 和 clip)属性画出半圆
- 路由器开启IPv6的方法
- 掘金 Web 沸点优化 1.1 版本上线啦~
- 隔行扫描, 逐行扫描
- HTML5基本元素使用
热门文章
- C#桌面办公应用-工资管理系统系列四
- java pattern.quote_Java Pattern quote(String)用法及代码示例
- HDUOJ 2042不容易系列之二
- USENIX Conference
- pip 安装报错的超时问题
- 六、FFmpeg使用---ffmpeg依赖x264库
- 利用python编写一个pc模拟器明日方舟脚本_明日方舟脚本1.0(python\adb\cv2)
- 产品分析的方法--SWOT分析
- 德州仪器达芬奇五年之路七宗罪,嵌入式处理器架构之争决战2012
- Mysql学习笔记2-提示符+创建(摘自慕课)