强行关闭后Android相机锁定

Mar*_*kus 11 android android-camera

我有一个应用程序,我使用设备相机.

现在我只在正常流量下释放相机.

@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    if(camera != null) {
        camera.stopPreview();
        camera.release();
    } 
} 
Run Code Online (Sandbox Code Playgroud)

因此,应用程序以意外的方式退出相机模式 - 即强制关闭(由于OutOfMemoryError) - 相机被锁定.释放它的唯一方法是重启设备.

申请开始后,我得到: RuntimeException: Fail to connect to camera service

我怎么能确定,相机在任何情况下都会被释放?

184*_*615 4

由于保留部分代码以便以后找到它的最佳方法是将其发布到“网络”中,

private UnexpectedTerminationHelper mUnexpectedTerminationHelper = new UnexpectedTerminationHelper();
private class UnexpectedTerminationHelper {
    private Thread mThread;
    private Thread.UncaughtExceptionHandler mOldUncaughtExceptionHandler = null;
    private Thread.UncaughtExceptionHandler mUncaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) { // gets called on the same (main) thread
            XXXX.closeCamera(); // TODO: write appropriate code here
            if(mOldUncaughtExceptionHandler != null) {
                // it displays the "force close" dialog
                mOldUncaughtExceptionHandler.uncaughtException(thread, ex);
            }
        }
    };
    void init() {
        mThread = Thread.currentThread();
        mOldUncaughtExceptionHandler = mThread.getUncaughtExceptionHandler();
        mThread.setUncaughtExceptionHandler(mUncaughtExceptionHandler);
    }
    void fini() {
        mThread.setUncaughtExceptionHandler(mOldUncaughtExceptionHandler);
        mOldUncaughtExceptionHandler = null;
        mThread = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且,在主线程的适当位置:

    mUnexpectedTerminationHelper.init();
Run Code Online (Sandbox Code Playgroud)

    mUnexpectedTerminationHelper.fini();
Run Code Online (Sandbox Code Playgroud)