在GWT中,我有类MyClass
,它注册了一些事件处理程序。有一个对象(object1
)MyClass
,在特定时刻,我想完成并使其处理程序停止侦听,因为之后我将创建一个不同的MyClass
对象(object2
)。
我该怎么做?我已经尝试过object1 = null
,但它的手柄一直在听(至少一段时间)。
处理程序可能仍然存在,因为 gc 没有绕过销毁它们。如果侦听器不再继续存在很重要,则需要取消注册它们。
执行此操作的一种方法是取消注册处理程序注册。例如,addClickHandler 返回一个可以取消注册的 HandlerRegistration。何时以及如何执行此操作取决于您的 GUI 类。你可以把注销放在你的finalize方法中,但你可能会发现这些方法被非常零星地调用,因为gc,当然因为这不是java而是javaScript。因此,将它们放入您的 gui 元素的分离或销毁方法中分离或卸载。