本文介绍了应用程序挂在camera.release()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用相机闪光灯手电筒的应用程序。这似乎很好地工作,但有时调用camera.release()导致大约一分钟左右挂起。我已经包括下面的code。我看着一大堆例子,我没有看到任何可能导致这样的事情。任何想法?
//最新
公共无效塞顿(布尔,上下文的背景下){ 如果(锁定){
Log.i(TAG,锁:真);
返回;
}
如果(上){
如果(mCamera == NULL){
mCamera = Camera.open();
} 参数PARAMS = mCamera.getParameters();
params.setFlashMode(MODE_TORCH);
mCamera.setParameters(PARAMS);
mCamera.start preVIEW();
}其他{
如果(mCamera!= NULL){
尝试{
参数PARAMS = mCamera.getParameters();
params.setFlashMode(MODE_OFF);
mCamera.setParameters(PARAMS);
} {最后
新主题(新的Runnable接口(){
公共无效的run(){
Log.i(TAG,新主题 - 开始);
锁定= TRUE;
mCamera.set previewCallback(NULL);
mCamera.stop preVIEW();
mCamera.release();
mCamera = NULL;
锁定= FALSE;
Log.i(TAG,新主题 - 结束);
}
})。开始();
}
}
}
}
//原版的
公共无效塞顿(布尔,上下文的背景下){
摄像头摄像头= mCamera;
如果(上){
如果(相机== NULL){
mCamera =相机= Camera.open();
} 参数PARAMS = camera.getParameters();
params.setFlashMode(MODE_TORCH);
camera.setParameters(PARAMS);
camera.start preVIEW();
}其他{
如果(相机!= NULL){ 尝试{
参数PARAMS = camera.getParameters();
params.setFlashMode(MODE_OFF);
camera.setParameters(PARAMS);
} {最后
camera.stop preVIEW();
camera.release();
mCamera =相机= NULL;
}
}
}
}
解决方案
尝试把它在一个线程在后台运行,所以它不会挂断了UI。
新主题(新的Runnable(){
公共无效的run(){
camera.set previewCallback(NULL); // previewCallback de_init。
camera.stop preVIEW(); //停止preVIEW
camera.release();
}
})。开始();
I'm working on a flashlight app using the camera flash. It seems to work fine but on occasion calling camera.release() causes a hang for about a minute or so. I've included the code below. I've looked at a bunch of examples and I don't see anything that could cause such a thing. Any ideas?
//latest
public void setOn(boolean on, Context context) {
if (lock) {
Log.i(TAG, "lock: true");
return;
}
if (on) {
if (mCamera == null) {
mCamera = Camera.open();
}
Parameters params = mCamera.getParameters();
params.setFlashMode(MODE_TORCH);
mCamera.setParameters(params);
mCamera.startPreview();
} else {
if (mCamera != null) {
try {
Parameters params = mCamera.getParameters();
params.setFlashMode(MODE_OFF);
mCamera.setParameters(params);
} finally {
new Thread(new Runnable() {
public void run() {
Log.i(TAG, "new Thread - start");
lock = true;
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
lock = false;
Log.i(TAG, "new Thread - end");
}
}).start();
}
}
}
}
//original
public void setOn(boolean on, Context context) {
Camera camera = mCamera;
if (on) {
if (camera == null) {
mCamera = camera = Camera.open();
}
Parameters params = camera.getParameters();
params.setFlashMode(MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
} else {
if (camera != null) {
try {
Parameters params = camera.getParameters();
params.setFlashMode(MODE_OFF);
camera.setParameters(params);
} finally {
camera.stopPreview();
camera.release();
mCamera = camera = null;
}
}
}
}
解决方案
Try putting it in a thread to run in the background so it wont hang up the UI.
new Thread(new Runnable(){
public void run(){
camera.setPreviewCallback(null); // PreviewCallback de_init.
camera.stopPreview(); // stop Preview
camera.release();
}
}).start();
这篇关于应用程序挂在camera.release()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!