Thread、Handler和HandlerThread关系何在?

HandlerThread是Android中用于简化线程间通信的类,它结合了Thread和Handler的功能,内部封装了Looper。在使用HandlerThread时,我们只需创建并启动线程,通过getLooper获取Looper创建Handler,然后发送和处理消息。相比手动创建Handler+Thread,HandlerThread提供了更安全、便捷的处理延迟和延时消息的方式。理解其工作原理有助于避免内存泄漏和提高应用性能。
摘要由CSDN通过智能技术生成

前言

前几天看到一道面试题:Thread、Handler和HandlerThread有什么区别?,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)》

但是这个HandlerThread是拿来做什么的呢?它是Handler还是Thread?我们知道Handler是用来异步更新UI的,更详细的说是用来做线程间的通信的,更新UI时是子线程与UI主线程之间的通信。那么现在我们要是想子线程与子线程之间的通信要怎么做呢?当然说到底也是用Handler+Thread来完成(不推荐,需要自己操作Looper),Google官方很贴心的帮我们封装好了一个类,那就是刚才说到的:HandlerThread。(类似的封装对于多线程的场景还有AsyncTask

使用方法

还是先来看看HandlerThread的使用方法:
首先新建HandlerThread并且执行start()

private HandlerThread mHandlerThread;
......
mHandlerThread = new HandlerThread("HandlerThread");
handlerThread.start();

创建Handler,使用mHandlerThread.getLooper()生成Looper:

        final Handler handler = new Handler(mHandlerThread.getLooper()){
   
            @Override
            public void handleMessage(Message msg) {
   
                System.out.println("收到消息");
            }
        };

然后再新建一个子线程来发送消息:

        new Thread(new Runnable() 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值