我正在尝试使用以下代码打开和关闭相机手电筒,但每次我调用这些功能时,它会减慢我的整个应用程序。这有点烦人。有什么方法可以在单独的线程中或者以不同的方式进行吗? 提前谢谢。
private void turnOnFlash() {
if (!isFlashOn && hasFlash) {
if (camera == null || params == null) {
return;
}
isFlashOn = true;
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
}
}
private void turnOffFlash() {
if (isFlashOn && hasFlash) {
if (camera == null || params == null) {
return;
}
isFlashOn = false;
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
}
}
我从另一个函数调用它,如
if (intensity[3] < 0.5f) {
turnOnFlash();
} else {
turnOffFlash();
}
答案 0 :(得分:0)
setParameters和getParameters可能会花费很长时间。
但真正减慢应用程序的是UI线程成为所有相机回调的处理程序。这里in an old answer我展示了在后台HandlerThread中处理相机是多么容易。
请注意,您在此处使用的相机API在几年前已被弃用,而当前的camera2 API正确处理此线程问题,并且不再需要这些技巧。
您可以将turnOffFlash()和turnOnFlash()发布到同一个HandlerThread。