回调机制在Android框架中的使用
这里有几个例子:
1、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Button点击事件监听的模拟):
a.定义接口
- public interface OnClickListener {
- public void OnClick(Button b);
- }
b. 定义Button
- public class Button {
- OnClickListener listener;
- public void click() {
- listener.OnClick(this);
- }
- public void setOnClickListener(OnClickListener listener) {
- this.listener = listener;
- }
- }
c. 将接口对象OnClickListener 赋给 Button的接口成员
- public class Activity {
- public Activity() {
- }
- public static void main(String[] args) {
- Button button = new Button();
- button.setOnClickListener(new OnClickListener(){
- @Override
- public void OnClick(Button b) {
- System.out.println("clicked");
- }
- });
- button.click(); //user click,System call button.click();
- }
- }
2、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Activity的模拟):
a.定义接口
- public interface Activity{
- public void onCreate();
- .....
- public void onDestory();
- }
b. Activity接口的实现类MyActivity
//定义一个类实现Activity接口
- public calss MyActivity implements Activity{
- @Override//实现方法,简单输出
- public void onCreate(){
- System.out.println("onCereate");
- }
- .....
- @Override//实现方法,简单输出
- public void onDestory(){
- System.out.println("onDestory");
- }
- }
c.系统运行环境类AndroidSystem
- //系统运行安装类
- public class AndroidSystem{
- //定义常量
- public static final int CREATE=1;
- ....
- public static final int DESTORY=2;
- //运行方法
- public void run(Activity a,int state){
- switch(state){
- case CREATE:
- a.onCreate;
- break;
- ....
- case DESTORY:
- a.onDestory();
- break;
- }
- }
- }
d.测试类
- publilc class Test{
- public static void main(String[] args){
- //实例化AndroidSystem
- AndroidSystem system = new AndroidSystem();
- //实例化MyActivity
- Activity a = new MyActivity();
- system.run(a,AndroidSystem.CREAATE);
- ....
- system.run(a,AndroidSystem.DESTORY);
- }
- }
以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。
个人理解: Class A 实现接口interface Callback重写起方法;
实例化后传递给Class B 的函数使用,
Class B 的 方法method(Callback c ) 接受到此接口的实例 c,
在method中调用A 实现的callback的方法;
转载于:
http://www.cnblogs.com/vtianyun/archive/2012/06/19/2555427.html