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
我怎么能确定,相机在任何情况下都会被释放?
由于保留部分代码以便以后找到它的最佳方法是将其发布到“网络”中,
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)
| 归档时间: |
|
| 查看次数: |
4892 次 |
| 最近记录: |