Android之---回调机制(CallBack)

回调机制(CallBack)

简介

回调方法:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。
回调方法的实现过程就叫Android(Java)的回调机制。

原理

  1. 定义一个回调接口(CallBack)和一个回调函数 (call)
  2. 让类A实现这个回调接口和回调函数,在类A的构造中拿到类B的应用
  3. 在类B中声明一个带CallBack参数的方法(setCallBack(CallBack CallBack ……))
  4. 在类A中用类B的应用调用类B的方法setCallBack(),然后在setCallBack方法中用类A的对象(即CallBack回调接口的实现类)调用类A中的方法call(即回调函数)

异步实现案例

interface CallBack:

/** 
 * 这是一个回调接口 
 * @author xiaokele
 * 
 */  
public interface CallBack {  
    /** 
     * 回调函数 
     * @param result 
     */  
    public void call(String result);  
}  

class A:

/** 
 * @author xiaokele
 * 实现了一个回调接口CallBack
 */  
public class A implements CallBack {  
    /** 
     * 类B的引用
     */  
    private B b;   

    /** 
     * A的构造方法,持有B的引用 
     * @param B 
     */  
    public A(B b){  
        this.b= b;  
    }  

    /** 
     * A通过这个方法去问B的问题 
     * @param question  
     */  
    public void askQuestion(final String question){  
        //这里用一个线程就是异步,  
        new Thread(new Runnable() {  
            @Override  
            public void run() {  
                /** 
                 * A调用B中的方法,在这里注册回调接口 
                 * 这就相当于A类调用B的方法C 
                 */  
                b.setCallBack(A.this, question);   
            }  
        }).start();  

        //A问完问题就去干其他的事情了,诳街去了  
        play();  
    }  

    public void play(){  
        System.out.println("我要逛街去了");  
    }  

    /** 
     * B知道答案后调用此方法告诉A,就是所谓的A的回调方法 
     */  
    @Override  
    public void call(String result) {  
        System.out.println("B告诉A的答案是--->" + result);  
    }    
}  

class B:

/** 
 * 类B
 * @author xiaokele
 * 
 */  
public class B{  

    /**
     * @param callBack   
     * @param question  A问的问题 
     */  
    public void setCallBack(CallBack callBack, String question){  

        System.out.println("A问的问题--->" + question);  

        //模拟B办自己的事情需要很长时间  
        for(int i=0; i<10000;i++){  

        }  

        /** 
         * B办完自己的事情之后想到了答案是2
         */  
        String result = "答案是2";  

        /** 
         * 于是就打电话告诉A,调用A中的方法 
         * 这就相当于B类反过来调用A的方法D 
         */  
        callBack.call(result); 
    } 
} 

同步实现案例

同步实现类似上面的异步实现(去掉异步案例中类A中askQuestion方法中开线程和类B中setCallBack方法中办自己事情去了)

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值