0

当我按下这个按钮时:

case R.id.btlento:
    Timer timers = new Timer();
    timers.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        cameraOn();
    },deloy1,poriod1);
        Timer timers2 = new Timer();
        timers2.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            cameraOff();
        }
    },deloy,poriod);

方法 cameraOn 和 cameraOff 是:

private void cameraOff() {
    // TODO Auto-generated method stub
    parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
    camera.setParameters(parameters);
    camera.release();
    camera = null;
}

private void cameraOn() {
    // TODO Auto-generated method stub
    camera = Camera.open();
    parameters = camera.getParameters();
    parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
    camera.setParameters(parameters);
}

变量是:

int deloy = 2000;
int poriod = 2000;
int deloy1 = 1000;
int poriod1 = 2000;

这一切都是为了让相机闪光灯闪烁,但我不知道如何打破循环,因为永远不会停止。

我怎样才能停止循环?

4

3 回答 3

0

在线程计时器上调用 cancel() 和 purge() 以停止线程。
如下所示。

private void cameraOff() {
// TODO Auto-generated method stub
if(timer != null){
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;

timer.cancel();// cancel and releases
timer.purge();
}
} 
于 2012-12-28T12:31:15.710 回答
0

为计时器任务创建一个变量,而不是使用匿名类。首先取消定时器任务然后取消定时器。

于 2012-12-28T12:35:25.210 回答
0

使用旗帜,

// member variables

private boolean cameraIsFlashing = false;
private Timer onTimer;
private Timer offTimer;

// constructor & other stuff

// button click method
case R.id.btlento:
     toggleCameraFlash();
   break;

private void toggleCameraFlash(){
    if(cameraIsFlashing){
        stopFlashing();
    } else {
        startFlashing();
    }
}

private void startFlashing(){
  cameraIsFlashing = true;
  // Start your timers
  onTimer = new Timer();
  onTimer.scheduleAtFixedRate(new TimerTask() {

  @Override
  public void run() {
      cameraOn();
  },deloy1,poriod1);
}

private void stopFlashing(){
  cameraIsFlashing = false;
  // Cancel / Stop your timers
  onTimer.cancel;
}
于 2012-12-28T12:25:06.450 回答