2016-11-05 2 views
0

아래에 정의 된대로 처리기가 있습니다. 내가 원한 것은이 핸들러가 작동을 멈추고 버튼을 누르는 것만으로 다시 트리거 할 수있게하는 것입니다. 현재 작업을 중지하기 위해 변수 isScrubbing을 사용하고 있습니다. 내가 최적 싶습니다 수면과 같은 그런 방법이없는 mUpdateTimeTask.sleep()Android에서 메시지가 나타날 때까지 Handler가 입력을 중단하도록하려면 어떻게해야합니까?

private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     if(isScrubbing == 0) { 
      . 
      . 
      . 
     } 
     // Running this thread after 100 milliseconds 
     mHandler.postDelayed(this, 100); 
    } 
}; 

답변

1

을하는 것입니다. 핸들러는 Runnables를 UI Thread가 수행 할 작업을 수행하는 큐에 게시 함을 기억하십시오. 당신이 원하는 것을의 possibile 구현 될 수있다 :

public class MyTask implements Runnable { 

    private boolean exit; 

    public void run() { 
     if (exit) { 
      return; 
     } 
     // do what you have to do 
     mHandler.postDelayed(this, 100); 
    } 

    public void start() { 
     exit = false; 
     mHandler.postDelayed(this, 100); 
    }  

    public void stop() { 
     exit = true; 
     mHandler.removeCallbacks(this); 
    } 
} 

한 번만 인스턴스화, 처음으로 (run 메소드 재 게시물 자체를) 게시하는 방법을 start()를 호출하고 stop() 종료 할 수 있습니다. 부울은 필요하지 않으며 mHandler.removeCallbacks(this)이면 충분합니다. 다른 구현

public class MyTask implements Runnable { 

    private boolean exit; 

    public void run() { 
     if (exit) { 
      // do your clean up work 
      mHandler.removeCallbacks(this); 
      return; 
     } 
     // do what you have to do 
     mHandler.postDelayed(this, 100); 
    } 

    public void start() { 
     exit = false; 
     mHandler.postDelayed(this, 100); 
    }  

    public void stop() { 
     exit = true; 
    } 
} 
관련 문제