找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 285|回复: 0

Android HandlerThread 和 Handler区别

[复制链接]

70

主题

11

回帖

286

积分

管理员

积分
286
发表于 2025-2-5 20:17:20 | 显示全部楼层 |阅读模式
HandlerThread 和 Handler 都是 Android 中用于处理线程间通信和异步任务的工具,但它们的使用场景和功能有所不同。下面是它们的主要区别和各自的使用方法
Handler
Handler 是 Android 中用于处理消息和任务的类。它通常与主线程或工作线程(例如子线程)相关联,用于在某个线程中处理消息队列中的任务。
作用
用于在某个线程中发送和处理 Message、Runnable 或其他异步任务
Handler 会把任务放到它关联的线程的消息队列中,线程会从消息队列中取出任务并处理它们
可以通过 Handler 实现线程间通信,将工作线程中的任务结果传递给主线程等
创建和使用
Handler 通常是在已经存在的线程中创建的,默认与该线程的 Looper 绑定(如果该线程是主线程,Handler 就会和主线程的 Looper 绑定)
[color=var(--hltools-color)][size=1.15em]JAVA


1
2
3
4
5
6
7
8
9
10
// 主线程中的 Handler
Handler handler = new Handler(Looper.getMainLooper());

// 在主线程中执行一个任务
handler.post(new Runnable() {
    @Override
    public void run() {
        // 这里是在主线程中执行的任务
    }
});
HandlerThread
HandlerThread 是 Thread 类的一个子类,它内置了一个 Looper。它的作用是启动一个新线程并为这个线程提供一个消息循环(即一个 Looper)。通过 HandlerThread 创建的线程可以像主线程一样,使用 Handler 发送和处理消息。
作用
HandlerThread 是一个便捷的类,用于在一个新的线程中创建并运行一个消息循环
HandlerThread 是一个便捷的类,用于在一个新的线程中创建并运行一个消息循环
使用 HandlerThread 可以避免手动为线程创建 Looper,提高了开发效率
创建和使用
HandlerThread 需要先启动,启动后你可以通过 HandlerThread.getLooper() 获取与该线程关联的 Looper,然后用该 Looper 创建 Handler
[color=var(--hltools-color)][size=1.15em]JAVA


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 创建一个 HandlerThread
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();  // 启动线程

// 获取线程的 Looper 并创建一个 Handler
Handler handler = new Handler(handlerThread.getLooper());

// 在子线程中执行任务
handler.post(new Runnable() {
    @Override
    public void run() {
        // 这里是在 handlerThread 线程中执行的任务
    }
});

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|软件开发

GMT+8, 2025-8-27 13:30 , Processed in 0.126194 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表