2012-08-23 4 views
0

는의가 (ref page) 다음 내가 있다고 가정 해 봅시다 :GWT 타이머 라이프 사이클

public class TimerExample implements EntryPoint, ClickHandler { 

    public void onModuleLoad() { 
    Button b = new Button("Click and wait 5 seconds"); 
    b.addClickHandler(this); 

    RootPanel.get().add(b); 
    } 

    public void onClick(ClickEvent event) { 
    // Create a new timer that calls Window.alert(). 
    Timer t = new Timer() { 
     @Override 
     public void run() { 
     Window.alert("Nifty, eh?"); 
     } 
    }; 

    // Schedule the timer to run once in 5 seconds. 
    t.schedule(5000); 
    } 
} 

어떻게 타이머 방법 onClick 종료 후 주위 여전히 올? 자동 로컬 변수를 가비지 수집해야하지 않습니까?

이것은 우리가 HTML 타이머에 대해 말하고있는 사실과 관련이 있으며 따라서 객체는 자동 로컬 변수 외부에 존재합니까?

답변

4

Timer.schedule(int delayMillis) 방법 (2.5.0-RC1에서 소스 코드) 타이머의 목록 자체 (타이머의 인스턴스)를 추가합니다 @veer에 의해

/** 
    * Schedules a timer to elapse in the future. 
    * 
    * @param delayMillis how long to wait before the timer elapses, in 
    *   milliseconds 
    */ 
    public void schedule(int delayMillis) { 
    if (delayMillis < 0) { 
     throw new IllegalArgumentException("must be non-negative"); 
    } 
    cancel(); 
    isRepeating = false; 
    timerId = createTimeout(this, delayMillis); 
    timers.add(this); // <-- Adds itself to a static ArrayList<Timer> here 
    } 
코멘트에서

스케줄러 스레드를 설명 :

타이머가 타이머에 기준을 유지하는 스레드 스케줄러에 의해 처리 될 예정

따라서 righfully 방지 쓰레기 수거는 입니다.

+1

오른쪽. 타이머는 '타이머'에 대한 참조를 보유하는 스케줄러 쓰레드에 의해 처리 될 것이므로 쓰레기 수거가 금지됩니다. – oldrinb

+0

@veer 좋은 정교, 나는 그걸 바닥에 뒀는데 괜찮 으면. – edwardsmatt

+0

괜찮습니다. :-) – oldrinb