应用程序重新安装后,有时相机无法释放。

3

我正在开发一个相机应用程序。有时当应用程序在前台时,我尝试重新安装该应用程序。在安装过程中,应用程序将被终止,并且不会调用 onPause() 方法,在此方法中我停止预览并释放相机资源。在正常情况下,系统会自动关闭并释放相机资源,并显示以下日志。

03-14 15:48:36.316: E/CameraHardwareSec(83): Could not dequeue gralloc buffer!
03-14 15:48:36.316: I/CameraHardwareSec(83): int android::CameraHardwareSec::previewThreadWrapper(): calling mSecCamera->stopPreview() and waiting
03-14 15:48:36.363: I/CameraHardwareSec(83): int android::CameraHardwareSec::previewThreadWrapper(): return from wait
03-14 15:48:36.363: I/CameraHardwareSec(83): int android::CameraHardwareSec::previewThreadWrapper(): exiting
03-14 15:48:36.363: W/SecCamera(83): int android::SecCamera::stopPreview(): doing nothing because m_flag_camera_start is zero
03-14 15:48:36.363: W/SecCamera(83): int android::SecCamera::stopRecord(): doing nothing because m_flag_record_start is zero
03-14 15:48:36.363: I/SecCamera(83): DeinitCamera: m_cam_fd(29)
03-14 15:48:36.371: I/SecCamera(83): DeinitCamera: m_cam_fd2(30)
03-14 15:48:36.386: E/CameraHardwareSec(83): preview window is NULL!
03-14 15:48:36.386: I/CameraService(83): Destroying camera 0
03-14 15:48:36.386: I/CameraHardwareSec(83): int android::HAL_camera_device_close(hw_device_t*)
03-14 15:48:36.386: I/SecCamera(83): DeinitCamera : already deinitialized
03-14 15:48:36.390: W/AudioFlinger(83): session id 89 not found for pid 83
03-14 15:48:36.394: W/AudioFlinger(83): session id 90 not found for pid 83

然而有时这些日志信息并没有输出,我猜测这意味着相机没有被释放。因此,当应用程序重新启动时,尝试打开相机时会抛出一个运行时异常"failed to connect to camera service"。

有人知道为什么在关闭相机后系统没有释放相机吗?

3个回答

1
你在清单文件中添加了权限吗?
<uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />

我已经添加了第一行,但是第二行和第三行没有被添加。据我所知,<uses-feature> 元素被像 Google Play 这样的市场用作过滤器。 - Star Chu

0
不要让用户在手机内存不足时使用摄像头。Android系统杀死进程时,你不想让你的应用程序受到指责。

0
也许尝试将cam.release()放在onDestroy方法中而不是onPause方法中?我不知道它是否有帮助,但这就是我要做的,以查看它是否可以修复它。

当系统杀死进程时,似乎既不会调用 onPause 也不会调用 onDestroy。但是感谢你的回答。 - Star Chu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接