Handler HandlerThread 以及Thread

简介: Handler HandlerThread 以及Thread

Handler:在Android中负责发送和处理消息,通过它可以实现子线程与主线程(UI线程) 的通信

Thread:Java中的线程类,用于创建子线程。

HandlerThread:继承自Thread,在Android中用于配合Handler 实现异步消息处理,拥有Looper对象,方便开发和消息处理。

public class HandlerThread extends Thread
@Override
    public void run() {
        mTid = Process.myTid();
        Looper.prepare();
        synchronized (this) {
            mLooper = Looper.myLooper();
            notifyAll();
        }
        Process.setThreadPriority(mPriority);
        onLooperPrepared();
        Looper.loop();
        mTid = -1;
    }

                     

 

Andriod提供了 Handler  和  Looper  来满足线程间的通信。 Handler 先进先出原则。 Looper 类用来管理特定线程内对象之间的消息交换 (MessageExchange) 。

1)Looper:  一个线程可以产生一个 Looper 对象,由它来管理此线程里的 MessageQueue( 消息队列 ) 和对消息进行循环。

2)Handler:  你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 MessageQueue 里 ; 或者接收 Looper 从 Message Queue 取出 所送来的消息。

3) Message Queue( 消息队列 ): 用来存放线程放入的消息。

4) Message:是线程间通讯的消息载体。

HandlerThread  的使用

Handler handler;
HandlerThread handlerThread ;
 
 
public void init(){
        handlerThread = new HandlerThread("setFlag");
        handlerThread.start();
        handler = new Handler(handlerThread.getLooper()){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case 1:
                        condition.set(true);
                        break;
                }
            }
        };
    }
 
 
 
 
 
@Override
protected void onDestroy() {
        super.onDestroy();
        mHandlerThread.quit(); // 退出消息循环
        workHandler.removeCallbacks(null); // 防止Handler内存泄露 清空消息队列
}

Looper.prepare()-为当前线程创建一个Loope对象r;

Looper.loop()-开启消息循环,只有调用该方法,消息循环系统才会开始循环;

Looper.prepareMainLooper()-为主线程也就是ActivityThread创建Looper对象;

Looper.getMainLooper()-通过该方法可以在任意地方获取到主线程的Looper;

Looper.quit() Looper.quitSafely()-退出Looper,自己创建的Looper建议在不使用的时候退出

 


目录
相关文章
|
网络协议 网络性能优化 算法
iptables深入解析-mangle篇
      讲了filter、ct、nat 现在剩下最后一个知名模块mangle,但是自身虽然知道内核支持修改数据包的信息,它主要用在策略路由和qos上.我们就具体分析一下.      mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(T...
8195 0
|
机器学习/深度学习 Dart TensorFlow
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(5)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(5)
530 0
|
机器学习/深度学习 人工智能 机器人
计算机视觉技术介绍
【10月更文挑战第14天】 计算机视觉技术介绍
|
存储 机器学习/深度学习 人工智能
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
在人工智能与鸿蒙系统集成开发中,硬件配置是关键基础。处理器(如英特尔i5+)提供强大算力支持模型训练与推理;内存(建议16GB+)确保数据高效流转,避免性能瓶颈;存储选用SSD加速数据读写;GPU(如NVIDIA RTX系列)通过并行计算显著缩短训练时间。此外,网络、电源和传感器等其他硬件也影响整体效率。合理选择硬件组合,可为开发提供坚实保障,推动智能设备生态的创新与发展。
229 0
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:输入与输出:Scanner与System类
你是否也经历过这些崩溃瞬间?三天教程连`i++`和`++i`都说不清,面试时`a==b`与`equals()`区别大脑空白,代码总是莫名报NPE。这个系列就是为你打造的Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可学习。直击高频考点和实际开发中的“坑位”,拒绝冗长概念,每篇都有可运行代码示例。涵盖输入输出基础、猜数字游戏、企业编码规范、性能优化技巧、隐藏技能等。助你快速掌握Java核心知识,提升编程能力。点赞、收藏、转发,助力更多小伙伴一起成长!
243 19
|
机器学习/深度学习 运维 监控
智能运维未来:AIOps在预测性维护与故障排查中的潜力
【10月更文挑战第26天】随着数字化转型的深入,企业对IT系统的依赖日益增加。传统的运维方式已无法满足需求,智能运维(AIOps)应运而生。AIOps通过集成和分析多源数据,利用机器学习算法实现系统状态的实时监控和预测性维护,显著提升了运维效率和质量。 示例代码展示了如何使用Python和scikit-learn实现故障预测模型,进一步说明了AIOps的应用价值。
776 5
|
JSON 前端开发 API
Django API开发实战:前后端分离、Restful风格与DRF序列化器详解
Django API开发实战:前后端分离、Restful风格与DRF序列化器详解
若依的目录结构,有三种一种目录菜单,目录菜单,展开的都是页面的功能,不会跳转,第二种页面菜单,目录里面的一点击都是展示页面,第三种是按钮菜单,点击之后
若依的目录结构,有三种一种目录菜单,目录菜单,展开的都是页面的功能,不会跳转,第二种页面菜单,目录里面的一点击都是展示页面,第三种是按钮菜单,点击之后
ASCII编码字符数量
ASCII编码字符数量
1688 2
|
监控 安全 Cloud Native
带你读《云原生机密计算最佳实践白皮书》——Intel SGX: Intel安全防护扩展
带你读《云原生机密计算最佳实践白皮书》——Intel SGX: Intel安全防护扩展
1221 1