Android の Looper をどうやって使うのか
AndroidではLooperはスレッドとメッセージキューを関連付けるクラスで、スレッドがメッセージキューからメッセージを処理できるようにする。
Looperを使用する手順を以下に示します。
- 現在のスレッドのLooperオブジェクトを取得します。メインスレッドでは、Looper.getMainLooper()メソッドを使って主スレッドのLooperオブジェクトを取得できます。他のスレッドでは、Looper.myLooper()メソッドを使って現在のスレッドのLooperオブジェクトを取得できます。
- メッセージの送受信をするためのクラスHandlerを作成する。Handlerはメインスレッド内で作成する場合と、他のスレッド内で作成する場合がある。他のスレッド内で作成する場合には、事前にそのスレッド内でLooper.prepare()メソッドを呼び出してLooperオブジェクトを作成する必要がある。
- ハンドラーをLooperオブジェクトに関連付ける。
- ハンドラオブジェクトを使用してメッセージの送受信が行われます。メッセージの送信はハンドラの`sendMessage()`メソッドを、メッセージ処理はハンドラの`handleMessage()`メソッドをオーバーライドすることで行われます。
Looperを使用して実装した例を以下に示します。
// 在其他线程中使用Looper
// 在其他线程中创建Handler对象
Handler handler = new Handler();
// 在其他线程中调用Looper.prepare()方法创建Looper对象
Looper.prepare();
// 在其他线程中调用Looper.loop()方法启动消息循环
Looper.loop();
// 在其他线程中使用Handler对象发送和处理消息
handler.post(new Runnable() {
@Override
public void run() {
// 发送消息
handler.sendMessage(handler.obtainMessage(1, "Hello"));
// 处理消息
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 处理消息逻辑
}
};
}
});
Looperを使用する際には、メッセージ処理がメインスレッドをブロックしないように注意してください。そうしないと、ANR(Application Not Responding)エラーが発生する可能性があります。