【问题标题】:setOnclickListener vs Activity implements View.OnClickListenersetOnclickListener vs Activity 实现 View.OnClickListener
【发布时间】:2016-12-15 05:32:12
【问题描述】:

我正在尝试在我的应用程序视图上实现OnClick 行为。由于我是 android 新手,并且想知道在实现 View.OnClickListener 接口时是否将其传递给将是更好的选择,或者将 setOnclickListener 匿名类用于小部件。就我而言,我的感觉是,传递它可能会导致整个活动及其子元素传递给特定的小部件,因此会消耗更多的内存,从而避免内存泄漏,这是最好的方法。

【问题讨论】:

  • 最好的选择是实现 View.OnClickListener。它将减少一些代码行,并且易于将所有点击事件保持在一个块中。
  • @Nas yup 我知道这一点,但我对内存消耗感到好奇。
  • 可能会减少文件大小中的一些内存(空间),但是两者都将引用同一个类并且工作方式相同,因此它分配相同数量的内存(RAM)。

标签: android facebook facebook-sharer


【解决方案1】:

其实我们在实现 OnClickListener 的时候是因为我们有不止一两个点击项。就像我在一个布局中有 10 个按钮并且我将每个点击侦听器编写为:

 button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });
  button2setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });
  button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

这不是一个好的编程习惯,这就是我们实现 OnClickListener 并将所有点击侦听器写入 onClick() 的原因。 因此,您将来进行任何更改都很容易。

如果你只有一个按钮,那么你可以使用 setOnClickListener()。

这两者没有太大区别。这都是关于 android 中良好的编码实践。 :)

【讨论】:

  • 一切正常,但我认为实现一个接口然后使用它传递意味着我们正在创建一个对特定小部件的活动的完整引用,因此可能会复制与活动相关的所有内存开销。在将接口作为匿名类传递时,我们只是传递特定接口而不是活动。
【解决方案2】:

你也可以使用

android:onClick = "ButtonOne"

xml 文件中的属性。很简单!

【讨论】:

  • 我不是在问什么是容易的,我只是从另一个角度考虑它,即内存管理。
  • AFAIK 所有三种方法都使用几乎相同的内存。要考虑的问题是,哪一个是好的编码实践。这取决于情况。在我看来,实现 View.OnClickListener 并使用 android:onClick = "ButtonOne" 比对每个按钮使用 setOnClickListner 更好。
猜你喜欢
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多