首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确处理异常:"getParameters失败(空参数)“

正确处理异常:"getParameters失败(空参数)“
EN

Stack Overflow用户
提问于 2013-02-18 17:10:28
回答 4查看 27.1K关注 0票数 44

我在Google商店安装了一个摄像头应用程序,安装了。我不断收到以下坠机报告:

getParameters失败(空参数)

我的问题是:,处理这个问题的正确方法是什么?

看看Android的源代码,它发生的地方并没有给我任何额外的细节。在android_hardware_Camera.cpp中引发错误:

代码语言:javascript
运行
复制
String8 params8 = camera->getParameters();
if (params8.isEmpty()) {
    jniThrowRuntimeException(env, "getParameters failed (empty parameters)");
    return 0;
}

看看开源的Android摄像头,看看它是如何处理这种情况的,这也没有多大帮助。在调用RuntimeException时,该代码似乎没有捕获getParameters。(除了一种情况下,他们抓住它,关闭相机,然后重新扔它)。

有正确的方法来处理这个问题吗?

如果不是,有什么原因导致这种情况经常发生吗?

注意:在任何一天,我有5k - 8k的活跃用户。其中有40-70个例外。这在我看来很高。我知道有些合法的情况下,相机可能无法初始化。但1%的用户似乎不合理。另外,由于Android摄像头应用程序没有处理异常,我真想知道是否还有其他根本原因。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-20 17:51:15

正如Eddy所提到的,当相机处于糟糕的状态时,就会发生这种情况。

照相机怎么会坏呢?

1)最常见的原因可能是关闭/释放相机,而之后仍然使用它。如果您在多个线程上使用Camera对象而不同步对Camera的访问,则这可能特别有问题。确保每次只有一个线程访问Camera

2)就我而言,这件事有点棘手。我使用一个SurfaceTexture,以便我可以使用相机输出作为OpenGL纹理。在Android4.0 (ICS)中,有一种新的方法SurfaceTexture.release()。这种方法在使用SurfaceTextures时非常重要,因为它比以前更快地清理内存。

问题是,当相机预览仍然处于活动状态时,我正在打电话给SurfaceTexture.release()。这破坏了Camera服务,这导致了问题中解释的问题。

在我的例子中,我通过将对SurfaceTexture.release()的调用推迟到用新的SurfaceTexture替换它之后才修复它。通过这种方式,我确信SurfaceTexture可以在没有任何不良副作用的情况下被清除。

票数 29
EN

Stack Overflow用户

发布于 2014-02-25 08:44:43

在我的例子中,我得到了一个错误:

getParameters失败(空参数)

我打开相机后给getParameters()打电话的时候。所以,请先打电话给getParameters(),然后再打给camera.unlock()

票数 36
EN

Stack Overflow用户

发布于 2013-02-18 19:39:37

是否有一个特定的Android设备经历了这个错误?或者你能在很多设备上看到它。

一般来说,您不应该看到这种错误。您的应用程序可能存在某种争用条件,这导致了这种情况,但它必须尝试在未初始化或已经发布的相机上调用getParameters。

它也可能是设备特定的摄像机代码中的错误,也可能是相机代码堆栈中某个地方的罕见竞争状况。如果没有更多的细节(logcat或Android bugreport从这样的崩溃中),就不可能知道--错误本身只是说设备特定的摄像机代码返回了一组空的参数。

但是一旦你得到这个错误,你就没什么办法了--相机子系统处于某种奇怪的状态。如果你想要处理它,我能建议的就是关闭和重新打开相机设备。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14941625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档