回调机制基本原理:
在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
相关代码:
首先需要一个Interface:
public interface MyInterface { void sayYourName(); void sayMyName(); }
然后需要一个类:
public class MyClass { MyClass(){ Log.i("jinyangyang", "MyClass-constructor"); //标注构造函数 } /* 用接口类型的对象作为输入参数 */ public void sayYourName(MyInterface myInterface){ Log.i("jinyangyang", "MyClass-sayYourName_start"); //标注方法开始 myInterface.sayYourName(); //遇到不知道具体实现的时候就用接口的抽象方法 myInterface.sayMyName(); Log.i("jinyangyang", "MyClass-sayYourName_finish"); //方法结束 } }
最后一个Activity:
public class CallbackFunActivity extends AppCompatActivity { /* 所谓的回调函数就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法, 但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法, 而是传递给A类,供A类去调用,这种机制就称为回调。 注意:该程序中MyClass相当于A类,CallbackFunActivity相当于B类 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_callback_fun); MyClass myClass = new MyClass(); myClass.sayYourName(new MyInterface() { @Override public void sayYourName() { Log.i("jinyangyang", "sayYourName callBack-interface-implementor"); //具体操作实现 } @Override public void sayMyName() { Log.i("jinyangyang", "sayMyName callBack-interface-implementor"); //具体操作实现 } }); } }
解释:
A类相当于MyClass类,B类相当于CallbackFunActivity类,MyClass类中调用了接口的抽象方法,但是没有具体的实现,那么需要CallbackFunActivity类来实现,但是CallbackFunActivity类实现之后并不能调用,而是传递给MyClass类来调用。