在非 UI 线程中使用 Looper.prepare() 和 Looper.loop() 方法来创建一个消息循环,然后再创建 handler。
时间: 2024-05-15 15:17:05 浏览: 11
在非 UI 线程中使用 Looper.prepare() 和 Looper.loop() 方法可以创建一个消息循环,使得该线程能够接收并处理消息。接着,可以在该线程中创建 Handler,并重写 handleMessage() 方法来处理消息。
下面是一个示例代码:
```
class MyThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// 处理消息
}
};
Looper.loop();
}
}
```
在该示例代码中,创建了一个名为 MyThread 的线程。在 run() 方法中,首先调用 Looper.prepare() 方法来创建一个消息循环。然后创建一个 Handler,并重写其 handleMessage() 方法来处理消息。最后调用 Looper.loop() 方法来启动消息循环。
接着,在其他线程中可以通过 MyThread 实例的 mHandler 属性来向该线程发送消息。例如:
```
MyThread thread = new MyThread();
thread.start();
Message msg = thread.mHandler.obtainMessage();
msg.what = 1;
msg.obj = "Hello";
thread.mHandler.sendMessage(msg);
```
在该示例代码中,首先创建了一个 MyThread 的实例,并启动该线程。然后创建一个消息,并设置其 what 和 obj 属性。最后通过 thread.mHandler.sendMessage() 方法来将该消息发送给 MyThread 线程中的 Handler 进行处理。
需要注意的是,如果在非 UI 线程中使用 Handler,必须在该线程的 run() 方法中调用 Looper.prepare() 和 Looper.loop() 方法来创建消息循环,否则将会抛出异常。