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

Gri*_*ace 38 android android-camera

我在安装了Google Analytics的Google Play商店中安装了相机应用.我一直收到以下崩溃报告:

getParameters失败(空参数)

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

查看它发生在哪里的Android源代码没有给我任何额外的细节.android_hardware_Camera.cpp中抛出错误:

String8 params8 = camera->getParameters();
if (params8.isEmpty()) {
    jniThrowRuntimeException(env, "getParameters failed (empty parameters)");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

查看开源Android相机,看看它如何处理这种情况也不是很有帮助.调用getParameters时,该代码似乎没有捕获RuntimeException.(除非在一个案例中他们抓住它,关闭相机,然后重新抛出它).

有没有正确的方法来处理这个?

如果没有,这种情况经常发生的原因是什么?

注意:在任何一天,我有5k到8k活跃用户.在这些例外中有40-70之间.这对我来说似乎高兴.我知道有一些合法的例子,相机可能无法初始化.但1%的用户似乎不合理.此外,由于Android相机应用程序不处理异常,它真的让我想知道是否有其他根本原因.

小智 31

在我的情况下,我收到此错误:

getParameters失败(空参数)

当我getParameters()解锁相机后打电话.所以,请在打电话getParameters()之前打电话camera.unlock().


Gri*_*ace 29

正如+ Eddy Talvala所提到的,当相机处于不良状态时会发生这种情况.

相机如何处于不良状态?

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

2)在我的情况下,它有点棘手.我使用一个,SurfaceTexture以便我可以使用相机输出作为OpenGL纹理.在Android 4.0(ICS)中,有一种新方法SurfaceTexture.release().使用SurfaceTextures 时此方法很重要,因为它比以前更快地清理内存.

问题是我SurfaceTexture.release()在相机预览仍处于活动状态时正在呼叫.这Camera导致服务崩溃,这导致了问题中解释的问题.

在我的情况下,我通过延迟调用来修复它,SurfaceTexture.release()直到我用新的替换它SurfaceTexture.这样我就可以确定SurfaceTexture可以清理它而没有任何不良副作用.