我正在开发相机应用程序。有时我试图在应用程序处于前台时重新安装它。在安装过程中,应用程序将被终止,并且不会调用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
”。
有没有人知道为什么系统在杀死它时没有释放相机。
答案 0 :(得分:0)
也许尝试将 cam.release()放入onDestroy而不是onPause方法?我不知道它是否会有所帮助,但那是。我想看看它是否能解决它。
答案 1 :(得分:0)
当手机内存不足时,请勿让用户使用相机。当你杀死进程时,你不希望你的应用受到指责。