Android之HandlerThread源码分析(第四篇:退出线程)

Android之使用HandlerThread 以及如何退出总结 1 、使用 HandlerThread handlerThread = new HandlerThread("handlerThread"); handlerThread.start(); //这里获取到HandlerThread的runloop MyHandler myHandler = new MyHandler(handlerThread.getLooper()); 阅读详情

前言 

    HandlerThread对象开启的工作线程,如果一直不退出,且也没有执行任务时并不会占用CPU资源,我们在项目中一般会选择一直留存一个HandlerThread对象表示的工作线程,方便我们随时向此工作线程中发起一个耗时的任务,不过HandlerThread仍然提供了可以退出工作线程的API,即下面两个方法

 

quit()方法分析

    public boolean quit() {
        Looper looper = getLooper();
        if (looper != null) {
            looper.quit();
            return true;
        }
        return false;
    }

用于结束工作线程的方法,只要结束Looper的循环,工作线程即会退出。特点:不会等待正在执行的任务,会立刻终止工作线程

1、先得到与当前线程相关的Looper对象,由局部变量looper持有

2、检查Looper

当looper不为空时,最终调用它的quit()方法完成退出,并向调用者返回true,表示退出成功

3、Looper没有创建时,向调用者返回false,表示退出失败

 

quitSafely()方法分析

    public boolean quitSafely() {
        Looper looper = getLooper();
        if (looper != null) {
            looper.quitSafely();
            return true;
        }
        return false;
    }

用于结束工作线程的方法,只要结束Looper的循环,工作线程即会退出,特点:等待所有正在执行的Message都处理完,才会退出工作线程

此处调用的是Looper对象的quitSafely()方法完成退出!

 

总结

1、HandlerThread的退出,完全调用的是Looper对象的方法

2、Looper的quit()、quitSafely()决定了退出方式的不同,参见Looper源码,Looper会调用MessageQueue的退出方法

、

HandlerThread详解:Java编程中的基本用法 本文还有配套的精品资源,点击获取 简介:HandlerThread是Android开发中的关键组件,它创建后台线程并提供Looper,用于处理消息和Runnable。本指南深入介绍HandlerThread的基本用法,包括创建实例、获取Looper、发送消息、停止线程以及应用场景。通过了解HandlerThread的生命周期和应用场景,开发者可以优化代码,提高应用程序性能和... 阅读详情

相关推荐

京东礼品卡绑定技术解析与安全验证实践

电商系统开发中,卡券绑定是常见的业务场景,其核心在于安全验证机制的设计与实现。从技术原理来看,现代验证系统通常采用多层防护,包括前端数据加密、行为验证(如滑块验证)和风控校验等关键技术。这些机制通过设备指纹采集、请求签名验证等方式,有效防范自动化攻击。在实际工程实践中,开发者需要特别关注接口鉴权流程,正确处理安全令牌(如st/vt令牌)和请求签名。京东礼品卡绑定作为典型案例,展示了如何平衡用户体验与系统安全,其验证系统会持续升级,需要开发者跟踪接口变化。对于企业级应用,建议采用混合模式技术方案,结合浏览器自

weixin_28607671的博客 233

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提供的一个方便、便捷的类,使用它我们可以快...

Jsonuu的博客 925

从零开始:Ubuntu 24.04 LTS + Win11双系统安装教程

本文将简单直白介绍如何从零开始在同一台电脑上安装 Ubuntu 24.04 LTS 和 Windows 11,你可以在需要进行专业开发或运维工作时,轻松切换到 Ubuntu,享受其带来的高效与自由;而在日常学习生活和娱乐休闲时,依然可以无缝使用熟悉的 Windows 环境。

萑澈的博客 8101

Android中Looper的quit方法和quitSafely方法

Looper是通过调用loop方法驱动着消息循环的进行: 从MessageQueue中阻塞式地取出一个消息,然后让Handler处理该消息,周而复始,loop方法是个死循环方法。那如何终止消息循环呢?我们可以调用Looper的quit方法或quitSafely方法,二者稍有不同。 Looper的quit方法源码如下:public void quit() { mQueue.quit(fals

孙群 2万+

Mac 环境配置jdk、Maven

3、终端打开配置jdk时候建好的脚本文件: open -e .bash_profile。4、查看maven是否安装成功和系统能不能识别maven/mvn命令:⬇️。输入⬇️并保存: 其中第一行JAVA_HOME替换为自己下的jdk路径。,安装编译好的二进制版本,具体安装zip还是tar.gz我看的。5、查看jdk是否安装成功和系统能不能识别java命令:⬇️。至此,我的Mac系统的环境配置jdk、Maven完成!然后就发现我的maven命令还是没作用,不识别,下载后直接安装即可,很快,点几下就OK了。

weixin_42416791的博客 4386

声纹识别初学

最近开始关注声纹识别技术,发现国内做这个的确实没有几家,而且大多重点推声纹认证,用在公安司法金融领域,而我却关注文本无关的声纹识别,这里把我搜到的一点资料汇总在此. 发现njustzj001的专栏有两篇文章适合入门的我,贴下链接: 综述:  http://blog.youkuaiyun.com/xmu_jupiter/article/details/47209961 PLDA解释:  http://

u013452331的专栏 2758

Android HandlerThread

1.HandlerThread特点 ①HandlerThread本质上是一个线程类,它继承了Thread; ②HandlerThread有自己的内部Looper对象,可以进行looper循环; ③通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务。 ④创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调用run方法,创建Looper对象。 2.HandlerThread使用步

zenmela2011的专栏 5999

Android SystemUI——自定义状态栏和导航栏(十二)

通过前面的文章内容,我们了解了Android系统原生的状态栏StatusBar和车载系统状态栏CarStatusBar的启动流程以及视图构建流程,这里我们来简单的看一下自定义状态栏和导航栏视图的实现流程。

小旭的专栏 2009

Android HandlerThread、Looper、MessageQueue 源码分析

在Android开发中,大家应该对有一定了解。顾名思义,是Thread的一个子类。与普通的Thread不同,Thread 通常一次只能执行一个后台任务,如果需要执行多个任务,就必须创建多个线程,这样容易导致资源管理复杂,甚至可能出现内存泄漏等问题。而有一个显著的特点,它能够串行地执行多个任务。每个任务通过消息的形式排队执行,线程池中的任务按顺序依次处理,无需手动管理线程的生命周期或调度过程。我们只需通过 Handler 将任务发送到中,它会自动按顺序执行,极大简化了开发过程。使用。

WeiPR的博客 1034

PCB Layout工程师核心能力与实战进阶指南

PCB Layout是电子硬件从原理图到物理实现的关键环节,本质是将电路逻辑转化为受电磁场、热力学与制造工艺约束的三维空间结构。其设计质量直接决定信号完整性(SI)、电源完整性(PI)和电磁兼容性(EMC)等核心性能指标。随着高速接口(如PCIe Gen5、USB3.2)、高密度封装(BGA微间距、HDI)及车规/工业级可靠性要求提升,Layout已从‘连线’演进为多目标协同优化的系统工程。掌握Altium Designer等EDA工具、理解叠层设计与DFM规则、具备SI/PI仿真意识,并能贯通芯片Data

weixin_42589700的博客 86

uniapp - 应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准(uniApp开发安卓APP上架应用市场审核被拒绝驳回,详细解决方案)

uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。uniapp vue2 vue3解决软件在运行时,未见向用户告知权限申请的目的,华为等上架被拒问题,关于华为应用市场上架需要同步告知使用权限的解决方案,uniApp应用软件在运行时,不符合华为应用市场审核标准。解决方案合集!app上架-您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。华为应用市场审核新规(未同步告知权限申请的使用目

🏆 前端领域优质创作者 4162

HandlerThread中Handler里的handlerMessage()方法究竟运行于哪个线程?

Android为了方便对Thread和Handler进行封装,也就是HandlerThread。HandlerThread继承自Thread,说白了就是Thread加上一个Looper。源码: 可以看到其本身便持有一个Looper对象。 之前学习的时候有两个疑问: HandlerThread为什么start完了之后不会退出? 一般我们都是在某个方法里(如onCreate)调用start方法来...

皮卡丘的博客 1168

CVE-2021-3156本地提权漏洞复现

受影响版本 sudo: 1.8.2 - 1.8.31p2 sudo: 1.9.0 - 1.9.5p1 测试 我这里是在本地centos7上进行测试。 需要目标机器上存在python编译器、目标主机出网或者能上传文件到目标主机。 以非root用户登录系统,并运行如下命令: sudoedit -s / 通常响应一个以 sudoedit: / 开头的报错,多半存在漏洞。 利用 提权脚本: https://www.o2oxy.cn/wp-content/uploa

The current road is different, love needs to distinguish between right and wrong 3776

从IntentService到HandlerThread再到Looper、Handler、Message

事情的起因是被人问到IntentService的东西,之前没有接触过,就查了一下,发现源码比较简单也很有意思,就延伸了一下。 参考: http://blog.youkuaiyun.com/lmj623565791/article/details/38377229 鸿洋大神的博客首先说一下IntentService和Service的区别: Service本身不支持耗时操作 IntentService支持耗时操作

zhiChao的博客 282

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android | HandlerThread源码分析

在Android中,默认情况下,一个线程没有与它相关联的Looper。也就是说,默认情况下,我们无法创建与该线程相关联的Handler。HandlerThread是一个继承自Thread的线程类,它用于启动一个有Looper的线程。通过这个Looper,我们就可以创建与该线程相关联的Handler。通过Handler,我们就可以很方便地控制该线程执行我们的耗时任务。在Android系统中,很多地方都使用了

cyc的专栏 3810

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android HandlerThread全解析

Android HandlerThread

李青涛的博客 1552

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android HandlerThread详解(源码分析)

1. 前言 本篇文章是对 Android HandlerThread 类的学习,通过简单的例子,及分析源码来深入学习。同时例子将以 Java && Kotlin 两种代码形式展示。 1.1 定义 HandlerThread: 一个拥有 Looper 对象的线程。 继承于 Thread 类,并拥有一个 Looper 对象,可以利用该 Looper 对象来创建 Handler 对象...

jerechen的博客 660

【Android源码篇】 HandlerThread使用和源码分析

HandlerThread作为子线程管理常用类,他自带封装的Looper处理Message,可以说是十分实用。子线程调度任务,方便我们在子线程中做更多的花样。 介绍: HandlerThread内部实现很简单,主要用在需要进行子线程调度任务的时候创建,但是想要完善熟悉原理,你必须熟悉Handler的内部原理实现。请看我的文章:【Android源码篇】 最详细的AsyncTask源码剖析 看完本...

sslinp的博客 2316

android handlerthread 线程管理,Android线程之HandlerThread

概述HandlerThread是Thread的一个子类,是Android中提供的另一种线程形态。Handy class for starting a new thread that has a looper. The looper can then beused to create handler classes. Note that start() must still be called.这个...

weixin_39585675的博客 203

HandlerThread源码分析

一、 HandlerThread是什么? HandlerThread本质上是一个Thread,继承Thread; HandlerThread内部有自己的Looper对象,可以进行looper循环; 通过获取HandlerThread的Looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务 优点是不会有堵塞,减少对性能消耗,缺点是不能同时进行多任务的处理,需要...

旧时光っ 477

Android多线程(四)——HandlerThread源码解析

概述 HanderThread是继承自Thread并封装Handler,实现了异步通信。 代码实现 Hander+Thread方式 class MainActivity : AppCompatActivity() { lateinit var mHandler :Handler override fun onCreate(savedInstanceState: Bundle...

whale的博客 247

HandlerThread源码分析,Android面试官

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTv = (TextView) findViewById(R.id.tv); initHandlerThread(); } private void initHandlerThread() { mHandlerThread = ne

m0_64604636的博客 361

Android:HandlerThread学习

前言 在Android中,主线程与子线程的交互,例如在子线程进行网络请求,请求后将数据更新到View上,我们常用Handler或者AsyncTask。HandlerThread与它们的区别在于会创建工作线程、Hanlder和Looper。这样就不用在主线程创建Handler或者AsyncTask的硬性要求。可以说HandlerThread是Handler的应用场景。 HandlerThread的使...

weixin_34209406的博客 182

HandlerThread:源码分析

1、工作原理 继承 Thread,可以创建一个带 Looper 对象的工作线程。 封装 Handler,与其他线程进行通信。 2、源码分析 public class HandlerThread extends Thread { int mPriority; int mTid = -1; Looper mLooper; private @Nullable Hand...

strugglelin'blog 218

HandlerThread和IntentService源码分析

关于Android消息机制的原理及Handler,MessageQueue,Looper的原理我们在之前有分析过,而HandlerThread则是Android对线程加入了Handler进行了封装处理的产物。而IntentService则是在Service基础上加入了HandlerThread的封装,今天就它们我们来分析下源码及各自使用的场景。 文章出自:HandlerThread和IntentService源码分析 HandlerThread HandlerThread是一种自带Looper的线程,Loo

fhcxiaosa1995的博客 263

HandlerThread 源码分析,面试真题解析人民一词86次

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。部分资料展示:有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

2401_84007049的博客 790
上一篇: Android之MessageQueue源码分析(第二篇:插入Message)
下一篇: Android之IntentService源码分析(第一篇:创建对象)
西二旗王员外
博客等级 码龄15年 875粉丝 246原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值