2012-11-18 1 views
2

기본적으로이 메시지의 하단에 코드 게시를하고 있습니다. foobar()는 공통 상태 시스템에 이벤트를 게시합니다. 또한 터치 스크린 이벤트가 일반 상태 시스템에 게시되었습니다. 사실, 동기화 문제가없는 핸들러를 사용하는 것이 사실입니까? (즉, 내 상태 시스템은 터치 짝수 및 포바 (fobar) 이벤트로 동시에 메시지를 보내지 않습니다)?Android 핸들러, 타이머 및 멀티 스레딩

private Handler handler = new Handler(); 
handler.postDelayed(runnable, 100); 


private Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     /* do what you need to do */ 
     foobar(); 
     /* and here comes the "trick" */ 
     handler.postDelayed(this, 100); 
    } 
}; 

답변

0

Handler 개체의 동일한 인스턴스는 선택의 Looper에 전달 메시지 /보다 Runnable의 큐 (기본적으로 메인 스레드)를 통해 처리합니다.

그래서 여러분이 메시지 목록을 Handler에 보내면, 한 번에 하나씩 병렬로 처리 될 것입니다.

그러나 동기화 문제가 염려되는 경우 일반적인 객체 주위에서 메소드 내부에 코드를 작성해야합니다. 그런 식으로 공통 객체를 잠글 때까지 기다릴 것이므로 어디서나 해당 메소드를 호출 할 수 있으며 결코 실행되지 않습니다. 다른 코드와 병렬로 synchronize(object) {}을 사용하십시오.