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() ) {
   
            @Override
            public boolean handleMessage(Message msg) {
   
                .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值