【发布时间】:2019-06-18 09:29:30
【问题描述】:
我已经为不同的 Camera2 API 项目工作了 2 个月。你可能知道,Camera2 API 很难理解和维护,它需要一些多处理、状态和回调的知识。在谷歌示例上“只是”拍照的简单示例有 1000 行 (https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java)。在互联网上,也有非常有前途的实现,称为 Camera3 https://github.com/QuinnFreedman/Camera3 - 它简化了 Camera2 的使用。
在我看到的一些文章和示例中,Camera2 应用程序的核心部分是机器自动机 (FSA)。 FSA 是可以的,但是随着它变大,很难理解、维护和扩展。恕我直言,解决方案是使用“状态”设计模式(https://en.wikipedia.org/wiki/State_pattern)。有保存状态的 Context 对象,以及状态接口和具体状态(打开、关闭、预览、拍照)。
简单的草图:
CamerContext:
- 字段:包含设备、会话、特征、表面、处理程序、锁、请求构建器、回调(捕获、会话、设备)
- 方法:onOpenCamera、onCloseCamera、onCaptureCompleted
相机状态:
- 具体:OpenState、CloseState、PreviewState、TakingPhotoState
问题:
- 有人用camera2 api做PoC“状态”设计模式吗?这可行吗?
- 有没有人用并行计算(锁、线程)做状态设计模式?有什么想法,教程,你有有趣的文章吗?
【问题讨论】:
标签: android design-patterns android-camera2 state-pattern