HandlerThreadの仕組みと使い方
HandlerThreadは、Looperを持つスレッドクラスであり、Threadクラスを継承し、Runnableインタフェースを実装しています。バックグラウンドスレッドで連続したタスクを実行しやすくし、Handlerを使用してメインスレッドと通信するためのものです。
HandlerThreadの基本原則は次の通りです:
- HandlerThread内部でLooperオブジェクトを作成し、Looper.prepare()メソッドを使用してその初期化を行う。
- HandlerThreadがメッセージを処理できるように、Looperのメッセージループメカニズムを開始するために、Looper.loop()メソッドを呼び出します。
- HandlerThreadの中でHandlerオブジェクトを作成し、そのHandlerオブジェクトをHandlerThreadと結び付けて、HandlerThread内でメッセージを処理できるようにします。
使用例は以下の通りです:
public class MyHandlerThread extends HandlerThread {
private Handler mHandler;
public MyHandlerThread(String name) {
super(name);
}
@Override
protected void onLooperPrepared() {
super.onLooperPrepared();
mHandler = new Handler(getLooper()) {
@Override
public void handleMessage(Message msg) {
// 在HandlerThread中处理消息
// ...
}
};
}
public void sendMessage(int what) {
if (mHandler != null) {
mHandler.sendEmptyMessage(what);
}
}
}
「MyHandlerThreadをメインスレッドで使用する」
MyHandlerThread handlerThread = new MyHandlerThread("MyHandlerThread");
handlerThread.start();
// 发送消息到HandlerThread中处理
handlerThread.sendMessage(1);
MyHandlerThreadの中で、onLooperPrepared()メソッドをオーバーライドして、Handlerオブジェクトを初期化し、HandlerThreadとバインドしました。その後、外部からsendMessage()メソッドを呼び出し、HandlerThreadにメッセージを送信して処理することができます。