android - takePicture 需要 CameraX (1.0.0-alpha06) 上的执行器
问题描述
从更新后
androidx.camera:camera-core:1.0.0-alpha03
到
androidx.camera:camera-core:1.0.0-alpha06
方法 setTargetAspectRatio(在 ImageCaptureConfig.Builder 中)和 takePicture(在 ImageCapture 中)的签名已更改。
Web 中的官方文档和信息没有显示如何使用新方法(如何指定执行程序)。
更新后损坏的代码:
...
val captureConfig = ImageCaptureConfig.Builder()
.setTargetAspectRatioCustom(Rational(1, 1)) //this method changed
.setFlashMode(flashMode)
.setLensFacing(lensFacing)
.build()
val capture = ImageCapture(captureConfig)
binding.takeAPhoto.setOnClickListener {
...
val imageFile = createTempFile(System.currentTimeMillis().toString(), ".jpg")
capture.takePicture(imageFile, object : ImageCapture.OnImageSavedListener { //this method also changed
override fun onImageSaved(file: File) {
...
}
override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) {
...
})
}
}
有没有人有(或知道在哪里可以找到)如何使用新方法的示例?提前致谢
解决方案
最近显然已经更新的官方 Google Codelabs 使用:Executors.newSingleThreadExecutor()
参考:https ://codelabs.developers.google.com/codelabs/camerax-getting-started/#4
编辑:由于@kos的回复对我来说也很有意义,所以我添加了这两个官方 Android 文档参考:
https://developer.android.com/reference/java/util/concurrent/Executors.html#newCachedThreadPool()
这样,本主题的每个读者都可以就执行者做出自己的决定。
进一步编辑:自 1.0.0-alpha07 以来,API 发生了重要变化,因此我研究了一些文档。有一个 GitHub 示例显示执行器检索,如下所示mainExecutor = ContextCompat.getMainExecutor(requireContext())
(来源)
如果你们中的一些人已经实现了 CameraX 并且运行良好,我肯定会等待 Android发行说明所推荐的 beta 版本
推荐阅读
- python - 由 gunicorn 运行的 Flask 应用程序在一段时间后被挂起
- asp.net-core - ASP .NET Core webapi 在中间件中设置 cookie
- javascript - if条件的奇怪执行
- google-analytics - 即使该维度的数据不可用,也可以从 Google Analytics 获取维度数据
- gzip - Flink如何容错将数据下沉到hdfs作为gzip压缩?
- openjfx - 当“库”节点丢失时,Netbeans 11 如何将库添加到项目中?
- variables - 如何将 Terraform 配置器“local-exec”输出存储在局部变量中并在“remote-exec”中使用变量值
- azure-logic-apps - LogicApps 场景登录、下载、压缩
- java - 使用资源锁进行并行测试?
- python - 在 arcsin [RuntimeWarning] 中遇到无效值