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

pjngdqdw  于 2023-06-20  发布在  Android
关注(0)|答案(4)|浏览(401)

我在Google Play商店中安装了一个相机应用程序,并安装了Google Analytics。我不断收到以下崩溃报告:
getParameters失败(空参数)
我的问题是:正确的处理方法是什么?
查看Android源代码并没有给予我任何额外的细节。在android_hardware_Camera.cpp中抛出错误:

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

研究开源Android相机,看看它如何处理这种情况也不是很有帮助。该代码在调用getParameters时似乎没有捕获RuntimeException。(除了在一种情况下,他们抓住它,关闭相机,然后再扔)。

是否有正确的方法来处理此问题?

”””如果不是,有一个原因,这是经常发生的吗?**
注意:在任何一天,我都有5 k-8 k的活跃用户。其中有40-70个例外。这对我来说似乎真的很高。我知道有合法的情况下,相机可能无法初始化。但1%的用户似乎不合理。此外,由于Android相机应用程序不处理异常,这真的让我怀疑是否有其他根本原因。

1tu0hz3e

1tu0hz3e1#

在我的例子中,我得到了这个错误:
getParameters失败(空参数)
当我解锁相机后打电话给getParameters()时。因此,请在调用camera.unlock()之前调用getParameters()

ttp71kqs

ttp71kqs2#

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

摄像头如何进入不良状态?

1)可能最常见的原因是关闭/释放相机,而之后仍在使用它。如果您在多个线程上使用Camera对象,而没有同步对Camera的访问,则这可能特别成问题。确保每次只有一个线程访问Camera
2)在我的情况下,这是一个有点棘手。我使用了一个SurfaceTexture,这样我就可以使用相机输出作为OpenGL纹理。在Android 4.0(ICS)中,有一个新方法SurfaceTexture.release()。在使用SurfaceTexture s时,使用此方法非常重要,因为它比以前更快地清理内存。
问题是我在相机预览仍处于活动状态时调用了SurfaceTexture.release()。这导致Camera服务崩溃,导致问题中解释的问题。
在我的例子中,我通过延迟对SurfaceTexture.release()的调用来修复它,直到我用新的SurfaceTexture替换它。通过这种方式,我确信可以清理SurfaceTexture,而不会产生任何不良副作用。

aydmsdu9

aydmsdu93#

是否有特定的Android设备遇到此错误?或者你在很多设备上看到它。
一般来说,您不应该看到这种错误。可能你的应用程序有某种竞争条件导致了这种情况,但是它必须涉及到在一个未初始化或已经发布的相机上调用getParameters。
它也可能是设备特定的摄像机代码中的错误,或者摄像机代码堆栈中某个位置的罕见竞争条件。如果没有更多的细节(logcat或Android bugreport从这样的崩溃),这是不可能告诉-错误本身只是说,设备特定的相机代码返回一个空的参数集。
但是一旦你得到这个错误,你就不能做很多事情了--相机子系统处于某种奇怪的状态。如果你想尝试处理它,我所能建议的就是关闭并重新打开相机设备。

scyqe7ek

scyqe7ek4#

默认情况下相机对象总是锁定的,所以当你调用unlock方法时,你允许其他进程使用你的参数。因此,在获取参数之前,请确保重新锁定了相机

相关问题