Looper.prepare()とLooper.loop()の使い方は?
Looper.prepare() メソッドは、現在のスレッドのLooperオブジェクトを初期化するために使用されます。このメソッドは、現在のスレッドでHandlerまたはMessageQueueを使用する前に呼び出す必要があります。
Looper.loop() メソッドは、Looperクラスの中心的なメソッドであり、無限ループを開始し、ループ内で現在のスレッドのMessageQueueからメッセージを取り出して処理を続ける。このメソッドは、Looper.quit() メソッドが呼び出されるまで、現在のスレッドをブロックし続ける。
以下是一个简单的示例,展示了如何使用 Looper.prepare() 和 Looper.loop() 方法:
public class MyThread extends Thread {
public Handler mHandler;
@Override
public void run() {
// 初始化 Looper
Looper.prepare();
// 创建 Handler
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 处理消息
// ...
}
};
// 启动循环
Looper.loop();
}
}
上記の例では、私たちはMyThreadというスレッドクラスを作成し、run()メソッドでLooper.prepare()を呼び出してLooperオブジェクトを初期化し、Handlerオブジェクトを作成しました。その後、Looper.loop()メソッドを呼び出してループを開始します。
ループ中では、mHandler.sendMessage() を呼び出してメッセージを送信し、handleMessage() メソッドでメッセージを処理することができます。
注意すべきことは、Looper.loop()メソッドが現在のスレッドをブロックし続けることです。そのため、適切なタイミングでLooper.quit()メソッドを呼び出してループを停止することを確認する必要があります。そうしないと、スレッドが抜けることができない問題が発生します。