gpt4 book ai didi

android - 多次运行 Activity 后,Camera.startPreview 崩溃并重启手机

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:48 25 4
gpt4 key购买 nike

我有一个 Activity 打开 Camera 并在 SurfaceTexture 上开始预览。一切正常,但我注意到,如果我反复离开 Activity 并返回,几次后,手机会卡住然后重新启动。

我已将问题缩小到对 startPreview 的调用。在问题发生之前,我收到两条不祥的日志消息:

01-19 10:20:52.038: E/IMGSRV(22777): :0: __map: Map device memory failed
01-19 10:20:52.038: W/GraphicBufferMapper(22777): registerBuffer(0x70b750) failed -14 (Bad address)

有没有人见过这个?这是 Galaxy Nexus 硬件或 Android 4.0 的问题吗?如果是这样,是否有任何变通办法?

注意:我的测试是在 Android 4.0 和 Galaxy Nexus 上进行的。

编辑 - 已解决:

事实证明这是由于 OpenGL 造成的内存泄漏。我在网上找到的所有示例都使用以下代码在 OpenGL 之后进行清理。

try { mEgl.eglDestroyContext(mEglDisplay, mEglContext); } catch (Throwable t) {}
try { mEgl.eglDestroySurface(mEglDisplay, mEglSurface); } catch (Throwable t) {}

这会泄漏表面,因此经过一定次数的尝试(因手机而异)后,将导致 OpenGL 无法初始化。例如,它会在 Nexus S 上尝试 32 次后失败,但在 LG Optimus 上只会尝试 8 次。

经过反复试验,我发现下面的代码解决了这个问题:

mEgl.eglMakeCurrent(mEglDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT);

注意:在 Galaxy Nexus 上,我没有得到一个很好的 OpenGL 错误,我可以向用户显示它似乎只是在 startPreview 上崩溃。我认为这与内存有关,但上面的修复也清除了它。

最佳答案

SDK docs for the android.hardware.Camera class说以下内容:

Important: Call release() to release the camera for use by other applications. Applications should release the camera immediately in onPause() (and re-open() it in onResume()).

您确定您的 Activity 在 onPause() 中释放相机并在 onResume() 中重新打开它吗?

如果您发布代码示例,我们将能够更好地解决您的问题。

关于android - 多次运行 Activity 后,Camera.startPreview 崩溃并重启手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com