HanderThread基本使用以及内部实现原理

编程之家收集整理的这篇文章主要介绍了HanderThread基本使用以及内部实现原理编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

内容概述

作者:长安皈故里本篇文章主要是讲解HanderThread基本使用以及内部实现原理,读者需要对Android的消息机制有一定的知识基础。HanderThread基本使用fun hdUse() { val handlerThread = HandlerThread("ChapterActivity", 100) handlerThread.start() val handler = Handler(handlerThread.looper) { msg -> .

语音解读

图文解释

作者:长安皈故里

本篇文章主要是讲解HanderThread基本使用以及内部实现原理,读者需要对Android的消息机制有一定的知识基础。

HanderThread基本使用

fun hdUse() {
    val handlerThread = HandlerThread("Chapteractivity", 100)
    handlerThread.start()

    val handler = Handler(handlerThread.looper) { msg ->
        if (msg.what == 5) {
            //执行代码逻辑
        }
        true
    }
    handler.sendEmptyMessage(5)
}
  1. 首先创建HandlerThread,构造方法的第一个参数代表线程名,第二个参数代表线程的优先级,待会原理分析会讲
  2. 调用HandlerThreadstart方法,一定要在getLooper方法调用调用
  3. 创建Handler,并传入HandlerThread的looper
  4. 之后就可以通过上一步创建的Handler发送并处理Message

HanderThread搭配协程

kotlinx-coroutines-android-1.4.1依赖中提供了一个扩展方法Handler.asCoroutinedispatcher,创建一个协程上下文元素——Coroutinedispatcher

val dispatch = handler.asCoroutinedispatcher()
lifecycleScope.launch(dispatch) { 
}

最终协程块中逻辑会被包装成一个Message添加handler持有的looper的消息队列中,最终handler持有的looper在哪个线程中创建的,协程块就会在哪个线程中执行。

#HandlerContext

HanderThread原理分析

HandlerThread继承于Thread,说明其就是创建了一个线程对象。到了这里就可以明白为什么HanderThread的构造方法为什么会传入线程名称和线程优先级了。

public class HandlerThread extends Thread

紧接着,之后调用HandlerThreadstart方法,也就是说开启了线程执行,就会执行线程的run方法

  1. 调用Looper.prepare方法创建该线程独有的Looper
  2. 设置当前线程的优先级
  3. 调用Looper.loop()开启for循环,不断的从消息队列获取Message并在当前线程执行

所以说,上面通过HandlerThread创建的handler发送的message最终执行在HandlerThread这个创建的线程中。

HanderThread案例讲解

大家都知道,Service中不能执行耗时操作,否则会被埋的炸弹爆炸直接ANR。所以官方提供了一个IntentService,来实现在Service中执行耗时操作。

public abstract class IntentService extends Service

核心代码onCreate中: #IntentService

看着是不是很熟悉,本质上就是利用HandlerThread实现的。不过,目前这个IntentService已经被标记为废弃了,系统推荐我们使用:

总结

以上是编程之家为你收集整理的HanderThread基本使用以及内部实现原理全部内容。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给好友。

原文地址:https://blog.csdn.net/weixin_61845324

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android岛屿数量算...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Andro...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑...
这篇“Android怎么使用Intent传大数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅...
本文小编为大家详细介绍“Android事件冲突怎么解决悬浮窗拖拽问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android事件冲突怎么解决悬浮窗拖拽问题”文...