0

だから私は、なぜそれがうまくいかないのか理解できないという本当に奇妙な問題を抱えています。アプリの一部としてストロボ ライトを構築しており、別のストロボ ライト クラスを作成しました。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
4

1 に答える 1

0

この購入について他の誰かのアドバイスを得たいと思うかもしれませんが、私の最善の推測は、sleep() についてそれほど具体的に言うことはできないということです。また、ミリ秒を使用することを忘れないでください。Android ハンドラーを使用して、スリープする代わりに postDelayed を実行することをお勧めします。

Androidでスレッドまたはプロセスを一時停止/スリープする方法は?

于 2014-02-06T02:21:59.187 に答える