読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

HandlerThreadを使ってHandlerみたいなQueue構造を他スレッドで使う

Android

概要

HandlerThreadを使うと他スレッドからでもHandlerの仕組みを使えるようなのでそのまとめ
(HandlerThread API1からあるじゃん…知らなかった恥ずかしい…)

詳細

Camera2 APIに四苦八苦していたらHandlerThreadなるクラスがあったので調べてみたら割と使えそうなクラスだった。
Handlerは一般的に、他スレッド中でUIスレッドとかメインスレッドで実行する必要があるものを実行するために使われる。
構造的にはLooperっていうQueueに処理をつっこんで、mainスレッドで順番に処理をする。

このLooperを使った順番を保障した処理を他スレッドでも使えるようにするのがHandlerThread。

        mBackgroundThread = new HandlerThread("CameraBackground");
        mBackgroundThread.start();
        mBackgroundHandler = new Handler(mBackgroundThread.getLooper());

mBackgroundThreadがHandlerThreadでmBackgroundHandlerがHandler。

これによって他スレッドの中でmBackgroundHandlerにpostした順番に処理が実行される。