〈kotlin〉Android studio使い方メモ7:handler

金宏和實さんの「作ればわかる!Androidプログラミング kotlin対応」を参考に
Android studioでkotlinを使ってAndroidアプリ作成。

LEDの点灯トーチモードを設定する時、
registerTorchCallback()メソッドの引数に設定したHandlerに取り消し線がついてしまった。

HandlerとLooper

Handlerはサブスレッドからメインスレッドへメッセージを受け渡すためのクラス。
メインスレッドは、Looperというメッセージを受け取って処理するQueueを持っており、
HandlerはこのLooperにメッセージを送っている。

従来のコード
cameraManager.registerTorchCallback(object :CameraManager.TorchCallback(){
//省略
}, Handler())

このままだとHandlerに取り消し線がつく。
Handlerの引数を指定しないと暗黙的にLooperが指定されるが、
暗黙的なLooperの指定はクラッシュのもとになるため非推奨になった。
Handlerに明示的にLooperを指定する必要がある。

変更後のコード
cameraManager.registerTorchCallback(object :CameraManager.TorchCallback(){
//省略
}, Handler(Looper.getMainLooper()))