怎么终止HandlerThread
时间: 2023-11-01 22:06:34 浏览: 42
要终止 `HandlerThread`,可以通过以下步骤来实现:
1. 创建一个继承自 `HandlerThread` 的自定义线程类,并重写 `run()` 方法。在 `run()` 方法中,使用一个循环来执行线程的操作。
```java
public class MyHandlerThread extends HandlerThread {
private Handler mHandler;
public MyHandlerThread(String name) {
super(name);
}
@Override
public void run() {
// 创建 Handler
mHandler = new Handler(getLooper());
// 执行线程的操作
while (!Thread.currentThread().isInterrupted()) {
// 线程运行逻辑
}
}
// 通过 Handler 发送消息来终止线程
public void stopThread() {
mHandler.getLooper().quitSafely();
}
}
```
2. 在主线程中创建自定义的 `MyHandlerThread` 对象,并启动线程。
```java
MyHandlerThread myHandlerThread = new MyHandlerThread("MyHandlerThread");
myHandlerThread.start();
```
3. 当需要终止线程时,调用 `stopThread()` 方法来发送消息给 `HandlerThread`,从而终止线程的执行。
```java
myHandlerThread.stopThread();
```
通过调用 `stopThread()` 方法,会发送一个消息给 `HandlerThread` 的消息队列,使得 `HandlerThread` 在下一次循环时退出,并释放相关资源。这样可以优雅地终止 `HandlerThread` 的执行。
需要注意的是,在 `run()` 方法中的循环体内,使用了 `!Thread.currentThread().isInterrupted()` 来判断线程是否被中断。当调用 `stopThread()` 方法时,会中断 `HandlerThread` 的 `run()` 方法,从而使得循环条件不满足,退出线程的执行。
这种方式可以通过发送消息来终止 `HandlerThread`,同时还可以在 `run()` 方法中进行其他清理操作,以确保线程的终止和资源的释放。