我正在用Java(J2ME)构建一些GUI,并怀疑避免与actionListeners有关的资源/内存泄漏的最佳做法。
假设我有一个类对象,它有一个成员变量,可以添加一个actionListener。在对象超出范围之前,是否需要显式删除此actionListener?通过不删除actionListener,当MyPanel类对象超出范围时,是否会创建内存/资源泄漏?
public class MyPanel implements ActionListener
{
private LabelButton _button;
public MyPanel()
{
_button.addActionListener(this);
}
...
}
答案 0 :(得分:3)
使用getListeners
/ getActionListeners
,您可以获取在指定元素处注册的所有侦听器,使用removeActionListener
,您可以从元素中删除侦听器
示例:
for(ActionListener act : buttonToBeFreedFromListeners.getActionListeners()) {
buttonToBeFreedFromListeners.removeActionListener(act);
}
只需注意:只要您不保存对元素中注册的侦听器的引用,GarbageCollector会在拾取元素时选择侦听器,因为它们只有对它的引用。
答案 1 :(得分:-1)
我认为你不需要明确删除,java在大多数情况下需要注意,我现在要做的就是不用担心,如果内存泄漏那么你可以使用像JProfiler这样的专用软件