android的回调机制

来源:互联网 发布:java windows相对路径 编辑:程序博客网 时间:2024/06/05 19:23
 头疼,看了一下午的java回调机制,不敢说懂了,只能说懂了怎么用,不过还有些问题,有想法的望大家多多指教。 举个例子理解下回调:    

1、什么是回调
回调其实是一种双向调用模式,也就说调用方在接口被调用时也会调用对方的接口,听起来就很拗口,翻译翻译就是“实现了抽象类/接口 的实例实现了父类的提供的抽象方法后,将该方法交还给父类来处理”,主要要弄清楚一点,实现方法交还给提供接口的父类处理!

2、为什么要用回调
我们需要将普通物体的特性抽象出来,共性之中又有特性,每个不同的特性就需要交给特定的情况处理,通过暴露接口方法可以减少很多重复,代码更加优雅。

3、举个例子
我们知道,一般情况下主线程是不执行耗时任务的,如果遇到一些耗时任务(如网络请求,文件读写,数据库读写等等),我们会将其放入子线程中去执行,当执行完毕后,子线程再将执行结果返回给主线程。这个过程就是回调。

4、具体代码示范:

public class Fragment_shouye extends Fragment implements OnClickListener {    【定义接口】 在类中定义一个Interface, 并在接口中定义一个抽象方法//定义一个ZXQT接口    public abstract  interface ZXQT{        public abstract void onhide(int k);    }    【接口对象】在类中定义一个该接口的成员变量//定义一个ZXQT接口类的对象    ZXQT zxqt;    }    private void initView() {    【设置对象】在类中定义一个公共方法,可以设置这个接口的对象,调用该方法给接口对象变量赋值,人家都是注释里面这么写的。/** *public void setCallback(Callback callback) {    * * this.mCallback = callback;    * * }    *///用(ZXQT)getActivity()方式竟然可以实现,我不太懂奥。    zxqt=(ZXQT)getActivity();    }

然后我在下面的地方调用了这个方法。

    zxqt.onhide(1);

在这个类的方法中实现了接口函数的具体方法

        @Override    public void onhide(int k) {        // TODO Auto-generated method stub        if(k==1){            LinearLayout imageView_back = (LinearLayout) this.findViewById(R.id.main_bottom);            imageView_back.setVisibility(View.INVISIBLE);            View line = (View) this.findViewById(R.id.line);            line.setVisibility(View.INVISIBLE);        }    }

有一篇简书文档中理解的特别到位:
所谓的回调函数就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
http://www.jianshu.com/p/3f86b7949f20

具体参考博客:
http://blog.csdn.net/xsf50717/article/details/50520462
http://blog.csdn.net/xiaanming/article/details/8703708/

0 0
原创粉丝点击