GWT 面板是否清除方法 un 附加事件处理程序



in gwt Panel.clear() 方法清除所有子小部件。 这是否意味着与这些子小部件关联的所有处理程序都将被删除或垃圾回收?

是的,它会(至少如果子小部件清理了它们对应用程序横向对象(如 eventBus)的引用并且不保存循环引用)。

根据本文档

核心 GWT 小部件系统有一个非常具体的事件处理系统,使它不可能触发泄漏。它也可以在IE中工作,只要你不要直接转到 JSNI 并自己挂接事件处理程序(使用像 Event.sinkEvents() 这样的东西就好了)。

调用 Widget.removeEventListener() 或HandlerRegistration.removeHandler() 从来都不是必需的(或有用的)出于您想要停止以外的任何原因接收事件(这是我们将 removeHandler() 塞入的原因之一处理程序注册 - 大多数人永远不需要调用它)。

和这篇博文。

但是,需要 removeHandler 来避免应用程序级的 java 式内存泄漏。

如果您有"全局"事件源,例如始终可见的导航条形小部件或应用程序范围的 EventBus,并且您有一个瞬态事件侦听器,如侦听事件的演示者,演示者的事件处理程序将防止它被垃圾回收,直到事件总线也是垃圾回收。

所以不用担心小部件或@UIHandler。只需清除选项卡即可工作。

不,它不会。你必须调用 removeHandler()。(最终)

在此双胞胎中:

>

阿拉伯数字。 需要 removeHandler 来避免应用程序级内存泄漏。

如果您有"全局"事件源,例如始终可见的导航 条形小部件或应用程序范围的 EventBus,并且您有一个瞬态 事件侦听器,如侦听事件的演示者,演示者的 事件处理程序将防止它被垃圾回收,直到 事件总线也是垃圾回收。

最新更新