2012-11-14 18 views
1

在GWT中,我有類MyClass,它註冊了一些事件處理程序。有一個對象(object1MyClass,在特定時刻,我想完成並使其處理程序停止監聽,因爲之後我將創建一個不同的MyClass對象(object2)。GWT:最終化對象並刪除它的事件處理程序

我該怎麼做?我已經嘗試過object1 = null,但它的嘮嘮叨叨不停地聽(至少一段時間)。

回答

6

處理程序可能仍然存在,因爲gc沒有解散它們。 如果重要的是聽衆不會繼續存在,那麼他們需要註銷。

一種方法是取消註冊HandlerRegistration。例如,addClickHandler返回可以註銷的HandlerRegistration。何時以及如何執行此操作取決於您的GUI類。你可以在你的finalize方法中註銷註冊,但你可能會發現這些方法由於gc而被非常偶然地調用,當然,因爲這不是java,而是javaScript。所以concider把它們放在你的gui元素onDetachonUnload的分離或銷燬方法中。

+3

事實上,GWT中永遠不會調用'finalize()'方法,因爲它不存在於JavaScript中,所以無法模擬。 –