Existing 3-function callback to Kotlin Coroutines

前端 未结 2 1613
眼角桃花
眼角桃花 2021-01-30 02:19

I have a general question with a specific example: I\'d like to use Kotlin coroutine magic instead of callback hell in Android when taking a picture.

manager.op         


        
2条回答
  •  深忆病人
    2021-01-30 02:50

    I've used 2 solutions for this type of thing.

    1: wrap the interface in an extension

    CameraDevice.openCamera(cameraId: Integer, 
                    onOpenedCallback: (CameraDevice) -> (), 
              onDisconnectedCallback: (CameraDevice) ->()) {
    
        manager.openCamera(cameraId, object : CameraDevice.StateCallback() {
            override fun onOpened(openedCameraDevice: CameraDevice) {
                onOpenedCallback(openedCameraDevice)
            }
    
            override fun onDisconnected(cameraDevice: CameraDevice) {
                onDisconnectedCallback(cameraDevice)
            }
       })
    }
    

    2: Make a simple container class with a more functional interface:

    class StateCallbackWrapper(val onOpened: (CameraDevice) -> (), val onClosed: (CameraDevice) ->()): CameraDevice.StateCallback() {
        override fun onOpened(openedCameraDevice: CameraDevice) {
            onOpened(openedCameraDevice)
        }
    
        override fun onDisconnected(cameraDevice: CameraDevice) {
            onClosed(cameraDevice)
        }
    }
    

    Personally I would start with something like these, and then build whatever threading differences on top of that.

提交回复
热议问题