- 作用 :获取子线程的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初始化完毕唤醒该方法。
相关推荐
【Android】HandlerThread详解
之前总结过Android Handler、Looper、Message、MQ的知识点,我们翻看源码的时候,看到一个关键类HandlerThread,当时还提出过疑问,这个和Thread有什么区别。本节,我们就结合实践来分析一下HandlerThread。 之前关于Android线程和进程的深入总结,各位有兴趣的建议,先看一下。 #Android进程和线程 1.源码解读 1.1 前言 大家看过上面我总结的handler、looper的相关文章的,一定看到过这样的总结片段。 至于具体原因,大家可以参看上.
HandlerThread 的使用及原理
Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called. HandlerThread是Android API提供的一个方便、便捷的类,使用它我们可以快...
Python+OpenCV实现游戏自动刷怪脚本(附完整代码)
本文详细介绍了如何使用Python和OpenCV开发游戏自动刷怪脚本,涵盖环境搭建、图像识别、行为决策引擎及反检测优化等关键技术。通过完整的代码示例,帮助开发者实现从简单脚本到智能自动化系统的升级,提升游戏效率。
HandlerThread使用
HandlerThread用于定时判断网络的项目运用,使用handler并未使用携程方式做耗时操作
电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)
本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。
Obsidian和Typora图片路径同步终极指南:告别混乱的assets文件夹
本文详细解析了Obsidian与Typora图片路径同步的终极解决方案,通过Custom Attachment Location插件实现动态路径管理,解决了两款工具间图片兼容性问题。文章提供了从基础配置到高级应用的完整指南,帮助用户告别混乱的assets文件夹,提升工作效率。
Android 消息处理机制-HandlerThread
Looper运行在一个线程中,其他线程都是通过Handler发送消息到Looper所在的线程进行线程间的通信的。 创建一个线程,默认是没有Looper的,而HandlerThread是可以创建一个带有Looper的线程,这个Looper可以用于创建Handler实例。。。 HandlerThreadHandlerThread调用示例创建HandlerThread对象启动HandlerThre...
别再为3D抓取发愁了!Halcon手眼标定保姆级教程(Eye-to-Hand模式,含完整代码)
本文提供Halcon手眼标定的保姆级教程,详细讲解Eye-to-Hand模式下的3D抓取实现方法。从硬件配置、坐标系系统到标定流程和核心算法,涵盖完整代码和实战经验,帮助用户快速掌握工业自动化中的精准抓取技术。
HandlerThread的解析
一、HandlerThread的使用 //创建实例对象 HandlerThread handlerThread=new HandlerThread("thread_handler"); //开启循环 handlerThread.start(); //创建handler,looper使用的是handlerThread的looper Handler handler=new Handler(hand...
ORB-SLAM3代码详解 - 第 18 篇 · Atlas 多地图系统、地图保存与全系统调优
会跑:理解三线程架构与数据流(01/08/10/13),能编译、配参、复现各数据集结果。会改:掌握相机模型抽象(05)、g2o 顶点与边(14)、预积分(15),能接入新传感器、新相机、新约束。会调:理解每个参数背后的物理含义与耦合(03/15/16/18),能针对自己的平台与场景做精度/实时/鲁棒的权衡。ORB-SLAM3 的价值不止于一个可用的 SLAM 系统,更在于它是一套工程化的几何状态估计模板:清晰的模块边界、可替换的相机/传感器抽象、紧耦合优化的标准范式。
【AI编程】Trae 环境搭建与配置从使用到项目实战详解
Trae 环境搭建与配置从使用到项目实战详解
Android HandlerThread 解析
一.概述 什么是HandlerThread,官方的介绍如下; Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called. 我给大家翻译一下,大概的
Vue3 - 详细实现调用浏览器摄像头拍照并生成图片预览,支持将抓拍的图像保存到用户本地或上传到服务器、调取前置摄像头和后置摄像头,开启摄像头并进行拍照,vue实现调用摄像头,电脑或手机调用摄像头拍照
vue3,nuxt3,摄像头,vue3网站打开摄像头拍照,vue3项目调用摄像头实现拍照功能,拍照后怎么保存,照相后上传到后端服务器,开启摄像头黑屏,如何默认后置摄像头,网页开启电脑摄像头并照相,前置拍照,vue3如何调用手机摄像头进行拍摄,拒绝权限后不再弹出了,微信公众号网页,摄像头报错,拍照左右镜像反了,浏览器不兼容怎么办,vue3调用电脑端摄像头实时拍照,解决调用摄像头权限无法弹出,打不开摄像头,Vue3如何调用手机的摄像头,调用本地摄像头实现拍照,浏览器不弹摄像头权限了,如何不使用https运行测试
从HandlerThread 的使用来分析HandlerThread的源码
转载请注明出处:一:前言再分析HandlerThread 的使用之前,我们先来简要介绍一下在android中线程的几种表现形式。 线程在android 中是很重要的概念,由于android的uiThread特性,我们常常要利用子线程进行耗时操作。uiThread进行界面的更新处理。在android 中,出了最为常见的Thread之外,还有AsyncTask,IntentService 以及要介绍的
智能合约监控告警:提示工程架构师用AI Prompt实现精准预警
当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
handlerThread详解
handlerThread产生背景 开启Thread子线程进行耗时操作 多次创建和销毁线程是很消耗系统资源的 handlerThread是什么 handler+thread+looper 是一个·thread内部有looper hanlderThread的特点 1.HandlerThread本质上是一个线程类,它继承了Thread 2.HandlerThread有自己的内部Looper对象,可以进...
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
java handlerthread_Android中HandlerThread详解
源码分析/** Copyright (C) 2006 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may ...
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
Android 多线程之HandlerThread 完全详解
转载请注明出处(万分感谢!): http://blog.youkuaiyun.com/javazejian/article/details/52334098 出自【zejian的博客】 关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 之前对线程也写过几篇文章,不过倒是没有针对android,因为java
Android HandlerThread
1.HandlerThread特点 ①HandlerThread本质上是一个线程类,它继承了Thread; ②HandlerThread有自己的内部Looper对象,可以进行looper循环; ③通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务。 ④创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调用run方法,创建Looper对象。 2.HandlerThread使用步
HandlerThread
HandlerThread是什么 HandlerThread继承自Thread,因此HandlerThread其实就是一个线程。 线程开启时也就是run方法运行起来后,线程同时创建一个含有消息队列的looper,并对外提供自己这个对象的get方法,这就是和普通的Thread不一样的地方。可用于多个耗时任务要串行执行。 使用流程 1.实例对象,参数为线程名 HandlerThread handlerThread = new HandlerThread("handlerThread"); 2.启动线
java handlerthread_HandlerThread: HandlerThread的理解
Android为了方便对Thread和Handler进行封装,也就是HandlerThread。HandlerThread继承自Thread,说白了就是Thread加上一个Looper。源码:可以看到其本身便持有一个Looper对象。之前学习的时候有两个疑问:1. HandlerThread为什么start完了之后不会退出?一般我们都是在某个方法里(如onCreate)调用start方法来启动Ha...
Android-HandlerThread详解
HandlerThread详解 抛砖引玉 在说HandlerThread之前,先看下这个。 mHandler.removeCallbacksAndMessages(null); 进去这个函数看下 public final void removeCallbacksAndMessages(Object token) { mQueue.removeCallbacksAndMess...
HandlerThread总结
在Android系统中,执行耗时操作必须使用子线程来执行,执行完线程以后线程便会自动销毁。但是如果如果我们有很多分步的耗时操作,如果我们不断的创建新的线程执行,不断销毁线程便会消耗很多的性能,那么该怎么办呢?android给我们提供了两个方法,一个就是使用本篇文章讲的HandlerThread,另一个便是使用线程池管理线程。 一、简单使用 1.创建实例对象 //参数表示线程名称 Handl...
详解 Android 中的 HandlerThread
HandlerThread 是 Android API 提供的一个便捷的类,使用它我们可以快速的创建一个带有 Looper 的线程,有了 Looper 这个线程,我们又可以生成 Handler,那么 HandlerThread 是什么,可以做什么呢,有哪些奇技淫巧可以被我们利用呢? 实现原理 在介绍原理之前,我们先使用普通的 Thread 来创建一个 Handler,创建的过程大致如下: Handler mHandler; private void createManualThreadWithHandler
1021



被折叠的 条评论
为什么被折叠?



