在GWT中,我有一个类MyClass
来注册一些事件处理程序。 object1
有一个对象(MyClass
),在某一特定时刻,我想完成并让其处理程序停止收听,因为在此之后我将创建一个不同的MyClass
对象(object2
)。
我该怎么做?我已经尝试过使用object1 = null
,但是它的handerls一直在听(至少有一段时间)。
答案 0 :(得分:6)
处理程序可能仍然存在,因为gc没有绕过它们来破坏它们。 如果听众不再继续存在很重要,那么他们需要取消注册。
执行此操作的一种方法是取消注册HandlerRegistration。例如,addClickHandler返回HandlerRegistration,可以取消注册。何时以及如何执行此操作取决于您的GUI类。你可以在你的finalize方法中放弃注销,但是你可能会发现这些方法因为gc而被非常偶然地调用,当然因为这不是java而是javaScript。因此,将它们置于gui元素onDetach或onUnload的分离或破坏方法中。\ n \ n \ n