任何人都可以解释一下,这个分离列表是什么,可以在网络中经常找到“具有现有父窗口小部件的窗口小部件可能不会被添加到分离列表”。我找不到解释或任何背景信息,只找到错误信息。 谢谢!
答案 0 :(得分:3)
作为memory leak mitigation的一部分(大部分,如果不仅仅是IE中需要的话),GWT有附加和分离小部件的概念。每当您将窗口小部件作为子窗口添加到另一个连接的窗口小部件时,子窗口小部件及其所有子窗口小部件也会成为附加,当您从其中删除窗口小部件时>附加父级,然后是分离及其所有子级。分离窗口小部件时,它应释放所有可能导致内存泄漏的资源。
上面构建了附加小部件的树,但是树需要一个根。有两种这样的root 附加小部件:: RootPanel
总是被附加,而由wrap()
创建的小部件ping现有的DOM元素会自动附加他们也是。
当页面卸载时,GWT确保分离所有小部件以避免内存泄漏。为此,它在所谓的分离列表中跟踪根附加小部件,并确保实际上应该是 root 小部件的小部件是根(即它们的元素不包含在另一个小部件的DOM子树中)。此规则的唯一例外是RootPanel.get()
,因为它代表所有其他小部件所在的文档的<body>
。
答案 1 :(得分:1)
分离列表是页面卸载时要分离的小部件列表(source,只猜测其中一个来源)。
基本上(以下不是一个完整的解释,如果你愿意阅读正式的google文档,GWT是非常好的文档),在GWT中,当你创建一个Widget时,该小部件在被添加到RootPanel之前不显示,或者附加到RootPanel的任何小部件(成为其父级)。有些操作(例如我之前指出的那个链接)导致小部件与RootPanel分离;但是,您无法在嵌入父窗口的窗口小部件上调用RootPanel.detachNow(widget)
。这样的电话会引起你要求的例外。