应用程序崩溃后相机未释放

Posted

技术标签:

【中文标题】应用程序崩溃后相机未释放【英文标题】:Camera is not released after app crashes 【发布时间】:2014-06-19 23:41:25 【问题描述】:

我的应用正在使用相机。我有一个CameraActivity 类和CameraFragment 类,

CameraFragment 负责释放相机:

@Override
public void onPause() 
    super.onPause();

    if (mCamera != null) 
        mCamera.release();
        mCamera = null;
    

我的应用在拍照时崩溃了。由于某种原因,相机没有被释放。现在我无法获得相机对象!此外,android 相机应用程序无法使用错误“无法连接到相机”

现在我知道相机是一个单例对象,一次只有一个应用程序可以获取它。 我不明白为什么 onPause 没有运行,我怎样才能更好地保护相机实例?

另外,如果发生这种情况,我该如何强制释放相机对象?这是个好主意吗?

遗憾的是,我不知道应用程序最初崩溃的原因。

感谢您的帮助。

罗伊

【问题讨论】:

好吧,我猜 onPause 没有运行是因为它崩溃了。我的猜测是当您的应用崩溃时,相机对象释放。 相机对象没有被释放,这是主要问题(和奇怪的部分)。相机对象仍然被捕获。释放相机对象的唯一方法是重启设备 你是对的,这可能出于某种原因发生。 This 应该有帮助。 谢谢!使用 Thread.setDefaultUncaughtExceptionHandler,希望它能工作 这是一个非常有效的问题 - 也面临同样的问题...... 【参考方案1】:

这应该会有所帮助:

    private static void unCaughtExceptionHandler() 
    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() 
        public void uncaughtException(final Thread thread, final Throwable ex) 
            ex.printStackTrace();
            releaseCamera();
            System.exit(0);
        
    );

【讨论】:

以上是关于应用程序崩溃后相机未释放的主要内容,如果未能解决你的问题,请参考以下文章

单击图像后,相机应用程序崩溃

应用程序在按后退按钮时崩溃

内存警告后释放 UIImage 时崩溃

如果在 iOS 设置中禁用相机,则在 AVCaptureDeviceInput 崩溃

为啥我的相机应用程序崩溃了?

进程崩溃时未释放 Win32 命名互斥锁