GWT-在分离/卸载时是否需要手动删除本机事件处理程序?

时间:2020-04-02 09:04:52

标签: java memory-management 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”或点击处理程序的引用。

谢谢。

1 个答案:

答案 0 :(得分:4)

您不需要删除处理程序。

GWT实际上做得更多,它使用位域来吸收DOM事件,以解决一些旧的浏览器使用循环引用的问题。尽管如今它已无用,但所有浏览器都能正确处理循环引用。 >10 years old article中的更多信息。

相关问题