Android 当循环开始时,其他一切都被忽略

Android 当循环开始时,其他一切都被忽略,android,Android,所以我想写的是频闪仪(手电筒以某种高频率闪烁)。但问题是,当我启动它时,它工作了,但当我再次按下按钮关闭它时,什么也没发生 代码块: protected void onCreate(Bundle savedInstanceState) { ... // Some code for checking if flashlight availabe and listener for seekbar for getting frequncy ... // My button listener (

所以我想写的是频闪仪(手电筒以某种高频率闪烁)。但问题是,当我启动它时,它工作了,但当我再次按下按钮关闭它时,什么也没发生

代码块:

protected void onCreate(Bundle savedInstanceState) {

...

// Some code for checking if flashlight availabe and listener for seekbar for getting frequncy

...

// My button listener (but1 - button)

but1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (flashOn) {
                // turn off flash
                turnOffFlash();
            } else {
                // turn on flash
                turnFlashOn();
            }
        }
    });
而现在主要的大块代码,我不认为我可以跳过任何一个

private void getCamera() {
        if(cam == null) {
            try {
                cam = Camera.open();
                params = cam.getParameters();
            } catch(RuntimeException e) {
                Log.e("Camera failed to open", e.getMessage());
            }
        }
    }   
    private void turnFlashOn() {
        if(!flashOn) {
            if(cam == null || params == null) {
                return;
            }else {
              if (freq == 0) {
                  camParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
              }


              else {
                  sr = new StroboRunner();
                  sr.freq = freq;
                  t = new Thread(sr);
                  t.start();
                  strob = true;
                  return ;
              }

            }

        }
    }

    private void turnOffFlash() {
        if(flashOn){
            if(cam == null || params == null) {
                return;
            }
            if(strob){
                sr.stopRunning = true;
                t = null;
                strob = false;
                return;
            }
             else camParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        }
        cam.setParameters(camParams);
        cam.startPreview();

    }


     private class StroboRunner implements Runnable {

         int freq;
         boolean stopRunning = false;

         @Override
         public void run() {
             Camera.Parameters paramsOn = cam.getParameters();
             Camera.Parameters paramsOff = cam.getParameters();
             paramsOn.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
             paramsOff.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
             try {
                 while (!stopRunning) {
                    cam.setParameters(paramsOn);
                    cam.startPreview();

                    Thread.sleep(freq);

                    cam.setParameters(paramsOff);
                    cam.stopPreview();

                    Thread.sleep(freq);
                  }
                 }
             catch(Throwable t) {}
         }
     }

我不是很高级,所以我不知道我写了20%的东西,因为一半是我自己的教程,一半是我自己写的代码。

我看不到你在哪里设置了
闪光灯,比如:

flashOn = true;

您可能单击该按钮并获得
!每次都使用flash。

您的
关闭flash()
方法的作用是什么?