在android中使用回调而不是实例化对象有什么好处

时间:2015-12-02 16:26:32

标签: java android interface callback

我一直在寻找,我发现了这个...

 interface CallBack {
    void methodToCallBack();
}

    class CallBackImpl implements CallBack {
        public void methodToCallBack() {
            System.out.println("I've been called back");
        }
    }

    class Caller {

        public void register(CallBack callback) {
            callback.methodToCallBack();
        }

        public static void main(String[] args) {
            Caller caller = new Caller();
            CallBack callBack = new CallBackImpl();
            caller.register(callBack);
        }
    }

与其他人有什么不同。

interface CallBack {
    void methodToCallBack();
}

class CallBackImpl implements CallBack {
    public void methodToCallBack() {
        System.out.println("I've been called back");
    }
}

class Caller {

    public static void main(String[] args) {

        CallBack callBack = new CallBackImpl();

        callBack.methodToCallBack();
    }
}

我的情况:  当这个监听器执行时,我在适配器y内有一个onclicklistener(只有一个孩子不完整的行),我想在活动上执行一个方法,因为在活动中我有访问UI ..

3 个答案:

答案 0 :(得分:1)

回调的目的是用于异步通信。你告诉别人通过回电(电话号码)告诉我什么时候发生的事情。除此之外,我对回调的好处是:
- 你可以避免课程之间的依赖 - 有助于避免内存泄漏。

举一个从片段到活动的沟通的例子。虽然你可以调用getActivity()。aMethodInActivity(),但它不是优选的,因为它违反了“可重用性”片段的目的之一。我们可能倾向于将活动实例传递给碎片,这可能导致活动泄漏。

片段和适配器的情况也是如此。从适配器到片段的通信应该使用回调进行。否则,如果片段作为参数传递给适配器,则适配器保持对片段的引用,片段保持适配器的引用。这可能会导致泄漏。

我尝试用Android视角解释回调的优势,我知道几个例子。你可以进一步探索。

答案 1 :(得分:0)

使用第一种方法,您注册到Callback,因此可以自动调用 methodToCallBack

你说你有一个 OnClickListener ,我猜它是在另一个班级。 您可以将其创建为内部类,这样您就可以访问UI了。

或者你在构造函数中给你的 OnClickListener 他需要的一切

答案 2 :(得分:0)

这应该完全符合你的要求: Communicating with Other Fragments