Android性能-Multiple View.onClick Listener x检查哪个视图称为onClick
在我的活动中,我有一些按钮和ImageView变量,考虑到设备内存、内存泄漏、性能等,实现的最佳选项是什么 选项1-每个小部件都有自己的视图。OnClickListener: 选项2-所有小部件共享相同的视图。OnClickListener:Android性能-Multiple View.onClick Listener x检查哪个视图称为onClick,android,performance,button,imageview,onclicklistener,Android,Performance,Button,Imageview,Onclicklistener,在我的活动中,我有一些按钮和ImageView变量,考虑到设备内存、内存泄漏、性能等,实现的最佳选项是什么 选项1-每个小部件都有自己的视图。OnClickListener: 选项2-所有小部件共享相同的视图。OnClickListener: 我可以想象,第一个选项速度更快,因为不需要if语句来知道哪个视图调用了调用,但第二个更好地说是内存使用?没有关系。如果有一些共享代码,您可以使用共享侦听器。如果没有代码共享,我会在每个按钮上使用不同的侦听器。听起来像是过早的优化。在很大程度上,这是一个风格
我可以想象,第一个选项速度更快,因为不需要if语句来知道哪个视图调用了调用,但第二个更好地说是内存使用?没有关系。如果有一些共享代码,您可以使用共享侦听器。如果没有代码共享,我会在每个按钮上使用不同的侦听器。听起来像是过早的优化。在很大程度上,这是一个风格的问题,以及您希望在侦听器中执行哪些操作。您不希望有一个巨大的onClick方法,其中包含混乱和不相关的内容。这还取决于您是否希望在定义这些回调的位置旁边有匿名方法。只需使用更易于阅读的代码,您就可以了。选项3-按钮[A | B | C].setOnClickListenerthis;并直接将视图v与按钮[A | B | C]进行比较
buttonA = new Button(this);
buttonB = new Button(this);
buttonC = new Button(this);
buttonA.setOnClickListener(new ListenerA());
buttonB.setOnClickListener(new ListenerB());
buttonC.setOnClickListener(new ListenerC());
buttonA = new Button(this);
buttonB = new Button(this);
buttonC = new Button(this);
MyListener mListener = new MyListener();
buttonA.setOnClickListener(mListener);
buttonB.setOnClickListener(mListener);
buttonC.setOnClickListener(mListener);
...
class MyListener implements View.OnClickListener{
@Override
public void onClick(View v) {
if(v.getId() == buttonA.getId()){
// stuff A
}
if(v.getId() == buttonB.getId()){
// stuff B
}
if(v.getId() == buttonC.getId()){
// stuff C
}
}
}