2012-09-01 5 views
0

손전등을 실행하기 위해 스레드를 사용하고 있으며 뒷면을 누른 후에 해당 스레드를 중지하고 싶습니다. 다시 누르면 손전등을 중지하십시오.

나는 스레드 시작하려면 다음 코드를 사용 :

progressDialog = new ProgressDialog(MainActivity.this); 
progressDialog.setMessage("Flashing..."); 
progressDialog.show(); 

thread = new Thread(MainActivity.this); 
thread.start(); 

을 그리고 스레드가하고있다 :

public void run() { 
    isOn = false; 
    cam = Camera.open(); 
    p = cam.getParameters(); 
    try { 
     for (int i = 0; i < pattern.length; i++) { 
      if (isOn) { 
       p.setFlashMode(Parameters.FLASH_MODE_OFF); 
       cam.setParameters(p); 
       Thread.sleep(pattern[i]); 
       isOn = false; 
      } else { 
       p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
       cam.setParameters(p); 
       Thread.sleep(pattern[i]); 
       isOn = true; 
      } 
     } 
    } 
    catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    cam.release(); 
    handlerFinish.sendEmptyMessage(0); 
} 

private Handler handlerFinish = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     progressDialog.dismiss(); 
    } 
}; 

내가이 중지 시도,하지만 진행 대화 상자가 기각되어있다 하지만 손전등은 여전히 ​​작동 중입니다.

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    p.setFlashMode(Parameters.FLASH_MODE_OFF); 
    cam.setParameters(p); 
    isOn = false; 
    thread.stop(); 
} 

내 목표를 달성하려면 어떻게해야합니까? 뒤로를 누른 후 읽기 및 플래쉬 등)? 즉, 스레드 정지까지 기다린 시도로 sorrunded while 루프에서 중지를 시도 -

+0

시도의를 Thread.join를 중지하려면이 루프를 시도 catch 일단 achived 루프를 종료 –

답변

0

멈출 때까지 스레드가 실행되는 동안) (스레드에게

boolean retry = true; 

    while (retry) { 

try { 

    thread.join(); 

    retry = false; 

    } catch (InterruptedException e) { 

    // try again shutting down the thread 

    } 

    } 
+0

죄송합니다, 조금 혼란 스러워요. 당신은 여전히 ​​onBackPressed()를 사용하고 스레드를 멈추기 위해 위의 코드를 추가한다는 것을 의미합니까? –

+0

yap이 내부에서 thred.stop 대신에 눌렀을 때 뒤쪽을 사용할 수 있습니다. 스레드는 비트 트릭이며, 자세한 내용은 java join 명령을 참조하십시오. –

+0

시도했지만 손전등은 여전히 ​​작동 중입니다. 그리고 앱이 종료 된 후에도 여전히 작동합니다. –

관련 문제