2014-04-25 5 views
0

무한 루프에서 플래시 라이트를 켜고 끌고 싶기 때문에 켜면 켜져있을 때 5 초 동안 기다린 다음 꺼서 5 초 후에 다시 켜는 등의 작업을 할 수 있습니다. 어떻게 할 수 있습니까? 그렇게? Executors 대신 (추한)에 Thread.sleep()의 사용과 같이왜 스레드 만들기가 실패 했습니까?

b2.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 

        // num = Integer.parseInt(n.getText().toString()); 

         while(bl){ 

          if(camera == null){ 

           new Thread(new Runnable() { 
             @Override 
             public void run() { 
              try { 
               Thread.sleep(5000); 
              } catch (InterruptedException e) { 
               e.printStackTrace(); 
              } 
              runOnUiThread(new Runnable() { 
               @Override 
               public void run() { 
                turnOn(); 
               } 
              }); 
             } 
            }).start(); 
           } 

          else{ 

           new Thread(new Runnable() { 
             @Override 
             public void run() { 
              try { 
               Thread.sleep(5000); 
              } catch (InterruptedException e) { 
               e.printStackTrace(); 
              } 
              runOnUiThread(new Runnable() { 
               @Override 
               public void run() { 
                turnOff(); 
               } 
              }); 
             } 
            }).start(); 
           } 
         } 

        } 
       }); 
+0

초보자를위한 UI 스레드. – njzk2

+1

실제로 스레드가하는 일을 실제로 알고 있습니까? – njzk2

+0

나는 inifinite 루프가 무한 수의 쓰레드를 생성하는 대신 쓰레드 내부로 들어가는 것을 의미한다고 생각한다. – CurlyPaul

답변

1

내가 위해 Thread의를 사용하지 않는 것이 좋습니다 이것을 달성하십시오. Runnable 클래스를 사용하고 Handler을 통해 지연 게시 하시겠습니까? 예를 들어 사용자가 UI 스레드에 Runnable 내부의 코드를 실행해야하는 경우

Handler handler = new Handler(); // make this a member variable of your class 
boolean isOn = false; // make this a member variable of your class 

final Runnable flashRunnable = new Runnable() { 
    @Override 
    public void run() { 
     if (isOn) { 
      turnOff(); 
      isOn = false; 
     } else { 
      turnOn(); 
      isOn = true; 
     } 
     handler.postDelayed(flashRunnable, 5000); 
    } 
}; 

handler.postDelayed(flashRunnable, 5000); 

, 당신도 대신 작성하는 ViewpostDelayed를 호출하면에 무한 루프를 넣을 수 없습니다 Handler

0

시도 뭔가 : 여기

내 코드입니다

boolean cameraOn = true 

final Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     // your logic here: 
     // if (cameraOn) ... 
     // else ... 
     // cameraOn = !cameraOn 
    } 
}; 

Executors.newScheduledThreadPool(1).schedule(new Runnable() { 

    @Override 
    public void run() { 
     runnable.run(); 
    } 

}, 5, TimeUnit.SECONDS); 
관련 문제