我搜索了stackoverflow并使用了使用Handler和postDelayed消息打开并关闭灯光的算法。
算法运行得很好......这就是我所做的:
if(mActive)//control the runnable thread
{
if(mSwap)//toggler for strobe
{
//Turn Flash On
cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
mSwap = false;
mHandler.postDelayed(mRunnable, 1);
}
else
{
//Turn Flash Off
cam.stopPreview();
cam.release();
cam = null;
mSwap = true;
mHandler.postDelayed(mRunnable, 1);
}
}
但我无法增加切换以匹配市场上那些应用的频闪频率......
我可以使用其他逻辑(而不是排队消息)吗? 使用计时器会产生更好的结果吗?
由于
答案 0 :(得分:1)
在您的代码中,每次打开/关闭手电筒时,您都会分配和取消分配Camera
对象。每次都需要相当长的时间。
要修复此问题,请将分配/取消分配移至onStart
和onStop
方法,并仅执行最低限度以打开和关闭灯光。