だから私は、なぜそれがうまくいかないのか理解できないという本当に奇妙な問題を抱えています。アプリの一部としてストロボ ライトを構築しており、別のストロボ ライト クラスを作成しました。turnOn メソッドまたは update メソッドを呼び出すと、間隔は変更されません。いくつかのコードを使用して説明する方が簡単になると思います:
public class Strobelight{
private int delayOn, delayOff;
public void turnStrobeOn(){...}
public void update(int a_delayOn, int a_delayOff){
delayOn = a_delayOn;
delayOff = a_delayOff;
}
public void turnOn(int a_delayOn, int a_delayOff){
delayOn = a_delayOn;
delayOff = a_delayOff;
this.turnStrobeOn();
}
ストロボ ライトが既にオンになっているかどうかに応じて、これらのメソッドのいずれかが呼び出され、指定された間隔でストロボ ライトをオンにするか、単に間隔を変更します。
間隔をカスタムに変更する代わりに、アプリケーションは、オンまたはオフの懐中電灯に対して Thread.sleep() を呼び出すときに、可能な限り最小の間隔を使用します。
編集:これはスレッドコードであり、懐中電灯をオンにするコードです
public void turnStrobeOn(){
for ( int i = 0; i < 3; i++){
isInCycle = true;
cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview(); // the flashlight is now on
lightIsOn = true;
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(delayOn);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
cam.stopPreview();
cam.release();
lightIsOn = false;
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(delayOff);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
} //end of for loop
isInCycle = false;
} // end of turnStrobeOn