首页 > 解决方案 > GWT - 是否手动删除分离/卸载所需的本机事件处理程序?

问题描述

如果将小部件添加到面板 (DOM) 和本机处理程序(例如 ClickHanlder 或 MouseDownHandler),而不保留对它们的引用,是否需要在分离/卸载时手动从注册中删除处理程序以避免内存泄漏或坏内存管理?

例子:

//at first, somewhere locally
Button b = new Button("My button");
b.addClickHandler(new ClickHandler(){...}) // or just (event -> {do stuff here})
globalPanel.add(b); //some generic scope panel

//later that evening...
globalPanel.clear();
//then maybe do other similar stuff, adding widgets and handlers, repeatedly 

那么是否需要保留处理程序注册并在其他一些 onDetach/onUnload 调用中将其删除?因为在这种情况下,没有为按钮“b”或单击处理程序保留引用。

谢谢。

标签: javamemory-managementgwt

解决方案


您不需要删除处理程序。

GWT 实际上做得更多,它使用位域来接收 DOM 事件,以修复一些旧浏览器的循环引用问题。虽然现在它没用了,但所有浏览器都正确处理循环引用。这篇>10 岁的文章中的更多信息。


推荐阅读