gpt4 book ai didi

android - 应用卡在 camera.release() 上

转载 作者:太空狗 更新时间:2023-10-29 14:28:57 26 4
gpt4 key购买 nike

我正在开发一款使用相机闪光灯的手电筒应用。它似乎工作正常,但有时调用 camera.release() 会导致挂起大约一分钟左右。我已经包含了下面的代码。我看过很多例子,但我没有看到任何可能导致这种情况的事情。有什么想法吗?

    //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;
}
}
}
}

最佳答案

尝试将它放在线程中以在后台运行,这样它就不会挂断 UI。

new Thread(new Runnable(){
public void run(){
camera.setPreviewCallback(null); // PreviewCallback de_init.
camera.stopPreview(); // stop Preview
camera.release();
}
}).start();

关于android - 应用卡在 camera.release() 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com