实现接口vs在Android中传递接口对象

时间:2017-04-27 10:05:56

标签: java android performance interface

正如标题所示,Android中有哪些更好的技巧?我提到了几个文档,但是找不到我需要的更多细节。

考虑我有5个以上的观看次数,我想在一个地方处理他​​们的点击次数,然后创建ClickListener object并传递它更好或者在Activity / Fragment中实现ClickListener interface然后传递活动/片段的实例更好,为什么?

修改

让我添加一个例子,因为大多数人都无法理解陈述

案例-1

private final View.OnClickListener onClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //some code
    }
};

public void doSomeTask(){
    view1.setOnClickListener(onClickListener);
    view2.setOnClickListener(onClickListener);
    view3.setOnClickListener(onClickListener);
}

案例-2:

public class SomeActivity extends AppCompatActivity implements View.OnClickListener {

    //some code
    public void doSomeTask(){
        view1.setOnClickListener(this);
        view2.setOnClickListener(this);
        view3.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //some code
    }
}

Case-1或Case-2的最佳方法是哪种?

2 个答案:

答案 0 :(得分:1)

  • 一个听众不仅可以分配给两个按钮,还可以分配给任意数量的按钮。而且不仅仅是按钮。其他视图元素也有不同的事件,需要听众。
  • 您创建的对象越少越好,因为为每个对象分配了内存,而且资源非常有限,尤其是对于移动设备。这就是为什么从优化的角度来看,为多个视图创建一个侦听器会更好。
  • 减少了代码量,使其更具可读性。

了解更多信息Check here

答案 1 :(得分:0)

我认为这取决于。

我个人更喜欢在可能的情况下创建一个实现接口(Case-1)的单独类。

如果您需要使用某个类的字段和方法,最好只实现该接口(Case-2)。

还有另一种情况 - 当您未明确设置界面时,例如Fragment回调接口。 Fragment有自己的生命周期 - 所以使用回调设置器是行不通的。我们所知道的是,在某一点上它们会被附加(在onAttach()中),所以我们尝试将收到的Context转换为我们需要的接口。这样,您必须在实例化Activity的{​​{1}}中实现接口。

小心其他一些问题。例如。你有一个需要监听器对象的单例类。您可以在Fragment中实现该接口,并将实例传递给该类。但Activity可以被销毁并重新创建 - 这将导致StrictMode报告的Activity,因为该单例类仍将保留对前一个activity instance count violation实例的引用。