

Android11以降でUIスレッドをブロックすることなくcreateCaptureSessionするにはどうすればいいのでしょうか?

Android11以降ではcreateCaptureSessionはSessionConfigurationを取る形式に変わっており、SessionConfigurationはexecutorを取ります。  
このexecutorにExecutors.newSingleThreadExecutor()を渡してみたのですが何も画面が表示されなくなってしまいました。

SessionConfigurationのexecutorに`mainExecutor`を渡すときちんとカメラからの映像が表示されますがmain
threadをブロックしてしまいます。そこで新たにbackgroundで動作するexecutorを作り、それを渡すことで問題を回避したいのですが、うまくできません。  
なぜなら、Android11ではAsyncTaskがdeprecateになっているためです(SessionConfigurationのreferenceはまだ更新されておらず、AsyncTask#THREAD_POOL_EXECUTORを使うべしと書いてある)

> Executor: The executor which should be used to invoke the callback. In
> general it is recommended that camera operations are not done on the main
> (UI) thread. This value cannot be null. Callback and listener events are
> dispatched through this Executor, providing an easy way to control which
> thread is used. To dispatch events through the main thread of your
> application, you can use Context.getMainExecutor(). To dispatch events
> through a shared thread pool, you can use AsyncTask#THREAD_POOL_EXECUTOR.

どうすればbackgroundでできるのでしょうか?

[code]

            camera.createCaptureSession(
                SessionConfiguration(
                    SessionConfiguration.SESSION_REGULAR,
                    lopc,
                    context.mainExecutor, // ここがmainExecutorだとmain threadをブロックしてしまうので
                                          // 新たにbackgroundで実行するexecutorを渡したい
                                          
                    myCaptureStatecallback(surfaceView)
                )
    
[/code]

[CreateCaptureSession(Android11以降)](https://developer.android.com/reference/android/hardware/camera2/CameraDevice#createCaptureSession\(android.hardware.camera2.params.SessionConfiguration\))

[SessionConfiguration](https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration#SessionConfiguration\(int,%20java.util.List%3Candroid.hardware.camera2.params.OutputConfiguration%3E,%20java.util.concurrent.Executor,%20android.hardware.camera2.CameraCaptureSession.StateCallback\))


CC BY-SA 4.0
2021-11-29T18:02:27.217
83874
2021-12-03T03:17:15.683
2021-12-03T03:17:15.683
5246
5246
question
android kotlin camera
Android11以降のCamera2 APIでUIスレッドをブロックしないようにcreateCaptureSessionする