
HandlerThread源码分析
prepare():初始化 Looper。这个过程通过 Looper 循环:通过 退出机制:通过
Looper 的初始化:不能直接 线程管理:确保将 HandlerThread 的 quit() 调用 资源释放:不要遗漏 quit(),否则线程将被SerializedForceClose
发布日期:2021-05-14 09:35:22
浏览次数:30
分类:精选文章
本文共 2115 字,大约阅读时间需要 7 分钟。
HandlerThread:Android Handler机制中的线程管理
HandlerThread 是 Android 操作系统中 Handler 机制的一部分,用于在子线程中处理异步操作。以下是 HandlerThread 的详细分析和使用方法。
HandlerThread 的基本作用
HandlerThread 类继承自 Thread 类,专门用于为 Handler 机制提供独立的线程环境。如果你对 Handler mecanism 不太熟悉,建议先学习相关基础知识。
HandlerThread 的简单使用
使用 HandlerThread 非常简单。你只需要以下几步:
// 创建一个 HandlerThread,并指定一个名字HandlerThread handlerThread = new HandlerThread("ThreadName");// 启动线程handlerThread.start();// 在 HandlerThread 中创建 Handler 并传入其 LooperHandler handler = new Handler(handlerThread.getLooper()) { @Override public void handleMessage(Message msg) { Log.i("处理数据的线程", Thread.currentThread().getName()); }};// 发送消息handler.sendEmptyMessage(1);
在使用完 HandlerThread 后,记得调用 quit() 方法来结束线程:
handlerThread.quit();
HandlerThread 的内部实现
HandlerThread 类的实现代码如下:
public class HandlerThread extends Thread { private Looper mLooper; public HandlerThread(String name) { super(name); // 初始化线程名称 } @Override public void run() { Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } onLooperPrepared(); Looper.loop(); } protected void onLooperPrepared() { // 可以在这里添加自定义逻辑 } public Looper getLooper() { synchronized (this) { while (isAlive() && mLooper == null) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } return mLooper; } public boolean quit() { Looper looper = getLooper(); if (looper != null) { looper.quit(); return true; } return false; }}
HandlerThread 的工作原理
HandlerThread 的主要工作包括:
Looper.prepare()
实现Looper.loop()
不断处理消息quit()
方法停止 Looper注意事项
Looper myLooper()
,而是需要通过 HandlerThread.getLooper()
获取如果需要更详细地了解 HandlerThread
的实现,可以参考其官方文档或源代码。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月12日 09时09分32秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
我的图床~
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
Iterable与Iterator
2019-03-11
关于WebView当前地址问题的疑惑
2019-03-11
Python机器学习(九十二)Pandas 统计
2019-03-11
SecSolar:为代码“捉虫”,让你能更专心写代码
2019-03-11
1965 - 2019 年最流行的编程语言变化
2019-03-11
链上钱包的博彩雷区
2019-03-11
GRUB2
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
GridView的另外一种分页方式,可提高加载速度
2019-03-11
GridView自定义删除操作
2019-03-11
一张图搞定RPC框架核心原理
2019-03-11
Scala中的包
2019-03-11
他来了他来了,他带着云栖大会的免费门票走来了
2019-03-11
获取linux 主机cpu类型
2019-03-11
限流的算法有哪些?
2019-03-11
Android Studio updating indices 一直刷新和闪烁
2019-03-11