HandlerThreadの仕組みと使い方

HandlerThreadは、Looperを持つスレッドクラスであり、Threadクラスを継承し、Runnableインタフェースを実装しています。バックグラウンドスレッドで連続したタスクを実行しやすくし、Handlerを使用してメインスレッドと通信するためのものです。

HandlerThreadの基本原則は次の通りです:

  1. HandlerThread内部でLooperオブジェクトを作成し、Looper.prepare()メソッドを使用してその初期化を行う。
  2. HandlerThreadがメッセージを処理できるように、Looperのメッセージループメカニズムを開始するために、Looper.loop()メソッドを呼び出します。
  3. 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にメッセージを送信して処理することができます。

bannerAds