Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android性能-Multiple View.onClick Listener x检查哪个视图称为onClick_Android_Performance_Button_Imageview_Onclicklistener - Fatal编程技术网

Android性能-Multiple View.onClick Listener x检查哪个视图称为onClick

Android性能-Multiple View.onClick Listener x检查哪个视图称为onClick,android,performance,button,imageview,onclicklistener,Android,Performance,Button,Imageview,Onclicklistener,在我的活动中,我有一些按钮和ImageView变量,考虑到设备内存、内存泄漏、性能等,实现的最佳选项是什么 选项1-每个小部件都有自己的视图。OnClickListener: 选项2-所有小部件共享相同的视图。OnClickListener: 我可以想象,第一个选项速度更快,因为不需要if语句来知道哪个视图调用了调用,但第二个更好地说是内存使用?没有关系。如果有一些共享代码,您可以使用共享侦听器。如果没有代码共享,我会在每个按钮上使用不同的侦听器。听起来像是过早的优化。在很大程度上,这是一个风格

在我的活动中,我有一些按钮和ImageView变量,考虑到设备内存、内存泄漏、性能等,实现的最佳选项是什么

选项1-每个小部件都有自己的视图。OnClickListener:

选项2-所有小部件共享相同的视图。OnClickListener:


我可以想象,第一个选项速度更快,因为不需要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
        }
    }
}