Мне нужно вспышку фонарика камеры в определенное время, в идеале с точностью около 2 мс каждые 0,5 сек. Со звуком я справился так хорошо, но вызов setTorchMode, похоже, занимает почти 1/2 секунды. Я попытался поместить вызов в Runnable, но он (как и ожидалось) создает отставание. Вот мои измерения времени:setTorchMode очень медленный, как я могу ускорить вызов?
public void doFlash() {
if (cameraManager == null) return;
try {
Log.d(TAG,"1="+System.nanoTime()/1000000);
cameraManager.setTorchMode(cameraId, true);
Log.d(TAG,"2="+System.nanoTime()/1000000);
yield();
Log.d(TAG,"3="+System.nanoTime()/1000000);
cameraManager.setTorchMode(cameraId, false);
Log.d(TAG,"4="+System.nanoTime()/1000000);
Log.d(TAG,"-------------");
} catch (Exception e) {
Log.d(TAG, "Could not switch on flash");
}
}
}
02-02 23: 06: 57,950 17528-17792/tech.glasgowneuro.attyseeg Д/EPFragment: 1 = 1662873286 02-02 23: 06: 58,668 17528-17792/tech.glasgowneuro.attyseeg D/EPFragment: 2 = 1662874004 02-02 23: 06: 58.668 17528-17792/tech.glasgowneuro.attyseeg D/EP: фрагмент: 3 = 1662874004 02-02 23: 06: 59.149 17528-17792/tech.glasgowneuro.attyseeg D/EPFragment: 4 = 1662874484 02-02 23: 06: 59.149 17528-17792/tech.glasgowneuro.attyseeg D/EPFragment: ------------- 02- 02 23: 06: 59.149 17528-17792/tech.glasgowneuro.attyseeg D/EP: 1 = 1662874484 02-02 23: 06: 59.649 17528-17792/tech.glasgowneu ro.attyseeg D/EPFragment: 2 = 1662874985 02-02 23: 06: 59,649 17528-17792/tech.glasgowneuro.attyseeg D/EP. Фрагмент: 3 = 1662874985 02-02 23: 07: 00.074 17528-17792/tech. glasgowneuro.attyseeg D/EPFragment: 4 = 1662875409
Я озадачен, почему эта функция занимает так много времени? Существуют ли другие вызовы, которые быстрее или как это можно сделать в течение 2 мс или меньше?