HandlerThread 和 Handler 都是 Android 中用于处理线程间通信和异步任务的工具,但它们的使用场景和功能有所不同。下面是它们的主要区别和各自的使用方法

Handler

Handler 是 Android 中用于处理消息和任务的类。它通常与主线程或工作线程(例如子线程)相关联,用于在某个线程中处理消息队列中的任务。

作用

用于在某个线程中发送和处理 Message、Runnable 或其他异步任务
Handler 会把任务放到它关联的线程的消息队列中,线程会从消息队列中取出任务并处理它们
可以通过 Handler 实现线程间通信,将工作线程中的任务结果传递给主线程等
创建和使用
Handler 通常是在已经存在的线程中创建的,默认与该线程的 Looper 绑定(如果该线程是主线程,Handler 就会和主线程的 Looper 绑定)

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

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 线程中执行的任务
}
});