当前位置: 首页 > ds >正文

Android多线程之HandlerThread详解

一 HandlerThread介绍

当系统中有多个耗时任务需要执行时,每个任务都会开启一个新线程去执行耗时任务,这样会导致系统多次创建和销毁线程,从而影响性能。为了解决这一问题,Android 提供了 HandlerThread,HandlerThread 是在线程中创建一个 Looper 循环器,让 Looper 轮询消息队列,当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞。

二 工作原理

  • HandlerThread 继承 Thread,在 Thread 开始执行时跟主线程在 ActivityThread.main() 方法内执行代码逻辑类似,初始化 Looper–Looper.prepare(),轮询消息–Looper.loop()
  • 初始化 Handler 时,使用 HandlerThread 线程的 Looper 对象初始化---- new Handler(Looper) 构造方法
  • 至于为什么是在子线程内执行是因为此 Handler 使用的 Looper 是子线程创建的,执行 message.target.dispatchMessage() 也在子线程内,所以最终执行的 Runnable 或者 handleMessage() 也会在子线程内。

三 实例代码

  // 步骤1:创建HandlerThread实例对象// 传入参数 = 线程名字,作用 = 标记该线程HandlerThread mHandlerThread = new HandlerThread("handlerThread");// 步骤2:启动线程mHandlerThread.start();// 步骤3:创建工作线程Handler & 复写handleMessage()// 作用:关联HandlerThread的Looper对象、实现消息处理操作 & 与 其他线程进行通信// 注:消息处理操作(HandlerMessage())的执行线程 = mHandlerThread所创建的工作线程中执行Handler workHandler = new Handler( handlerThread.getLooper() ) {@Overridepublic boolean handleMessage(Message msg) {.
http://www.xdnf.cn/news/11544.html

相关文章:

  • Unity中Avatar换装实现
  • 【初探Java之路 一 】什么是Java以及安装其环境
  • InstantClient+PLSQL安装配置教程
  • 【毕业设计源码】PHP网上商城管理系统
  • 计算机的发展史与计算机硬件组成
  • 单片机---HLK-W801开发环境搭建
  • JavaScript保姆级教程 ——— 重难点详细解析(万字长文,建议收藏)
  • 栏栅解密
  • linux ubuntu 24.04安装优麒麟ukylin版搜狗输入法
  • PostMessage和SendMessage的区别
  • 2023 Android面试官 常问的问题以及答案(附最新的Android面试大厂必考174题 )
  • ZYNQ FPGA实验——ADDA测试
  • 电脑出现错误代码:-118是什么情况,解决错误代码:-118的方法
  • 横盘是什么意思?
  • 嘉靖王朝最大的一出闹剧和惨剧——大礼仪之争
  • 使用C#和.NET Core的ETL作业
  • 【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt
  • Linux系统命令大全(超级详细版)
  • TestLink的使用实例
  • Ubuntu、kubuntu、xUbuntu、lubuntu等版本区别及界面样式
  • 2024年最新TCPView下载安装使用教程(图文教程)超详细(1),网络安全开发实用必备的几款插件
  • 特异度(specificity)与灵敏度(sensitivity)
  • 字符编码全解析:ASCII、GBK、Unicode、UTF-8与ANSI
  • python3中配置文件ini的使用详解----读写、list/dict/path等变量的应用、解码
  • VS 番茄插件 Visual Assist X_10.9.2440
  • mysql : grant权限命令汇总
  • JSF入门之helloworld
  • 20220801 git push -f命令
  • c语言---函数递归(详解)
  • Android 平台 metaRTC使用源码调试