好吧,我正在努力优化我的应用程序,我想每次我们设置一个监听器时,通常我们都是这样做的
fadeOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
});
这样,我们是否每次都通过不提供变量名来创建一个新对象?我的意思是假设我想为 fadeOut 设置两次监听器,这不会占用两个监听器的两倍空间已经创建了?难道我不应该创建一个变量吗?并在需要时继续重写它?
fadeOut.setAnimationListener(null) 会清除所有已创建的变量吗? 这种常见做法是否占用的内存太少以至于可以忽略?
最佳答案
好吧,内存不是这里唯一的问题。当然,它占用的内存是单个监听器的两倍,但最重要的是,您将失去获得更清晰、更有意义的完整代码的能力。这是一个更好的选择:
//as a field
FadeAnimationListener fadeAnimationListener = new FadeAnimationListener();
//inside a method
fadeOut.setAnimationListener(fadeAnimationListener);
//as a static or not inner class or a public high level class
private static class FadeAnimationListener implements AnimationListener {
@Override
public void onAnimationEnd(Animation animation) {
//do your specific stuff here
}
@Override
public void onAnimationRepeat(Animation animation) {
//do your specific stuff here
}
@Override
public void onAnimationStart(Animation animation) {
//do your specific stuff here
}
}
请注意,在 Eclipse 中,您可以按 CTRL+1(mac : command + 1),快速修复菜单将为您提供从匿名内部类创建适当内部类的方法。所以基本上,这种更简洁的方法不需要击键/没有任何代价。
关于调用 setListener(null),这通常不是必需的,因为从组件到它的监听器的所有东西都会一起被垃圾收集(当 Activity 结束时),并且监听器的成本不足以真正关心它.
此外,请仔细阅读这种情况下方法的 javadoc,它们可能并不都允许空监听器并做出正确 react ,尽管它们通常会这样做,但这不是“定义明确的标准”。
关于java - 关于对象创建的基本事情 :is it a good practice to create a new object of listener, 每次我们想为一个 View 设置一个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036432/