〈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()))