在gwt中Panel.clear()方法清除所有子窗口小部件。这是否意味着所有与这些子窗口小部件相关联的处理程序都将被删除或垃圾收集?
答案 0 :(得分:2)
是的,它会(至少如果子窗口小部件清除了对应用程序横向对象的引用,例如eventBus并且不保存循环引用)。
核心GWT小部件 系统有一个非常具体的事件处理系统 不可能引发泄漏。 它也适用于IE,只要你 不要直接去JSNI并自己连接事件处理程序(使用 像Event.sinkEvents()这样的东西就好了。
调用Widget.removeEventListener()或 HandlerRegistration.removeHandler()永远不是必需的(或有用的) 除了你想要停止的任何原因 接收事件(这是我们将removeHandler()隐藏起来的原因之一 处理程序注册 - 大多数人永远不需要调用它。)
但是,removeHandler需要避免应用程序级别的java-esque内存 泄漏。
如果您有“全局”事件源,例如始终可见的导航 吧小部件或应用程序范围的EventBus,你有一个瞬态 事件监听器,就像主持人收听事件一样,是主持人的 事件处理程序将阻止它被垃圾收集,直到 EventBus也是垃圾收集。
所以不要担心小部件或@UIHandler。只需清除标签即可。
答案 1 :(得分:-1)
不,不会。你必须致电removeHandler()。 (最终)
>
2。需要removeHandler来避免应用程序级内存泄漏。
如果您有“全局”事件源,例如始终可见的导航 吧小部件或应用程序范围的EventBus,你有一个瞬态 事件监听器,就像主持人收听事件一样,是主持人的 事件处理程序将阻止它被垃圾收集,直到 EventBus也是垃圾收集。