Android开发非常实用的技术 - 回调

来源:互联网 发布:物联网 人才需求数据 编辑:程序博客网 时间:2024/05/29 15:43

明朝朱棣夺位当上皇帝后,他的侄子建文帝朱允炆下落不明,朱棣曾派人秘密寻找,一个是下西洋的郑和,另一个是胡濙?可是直到死前朱棣才得到胡濙带回的答案—–《明朝那些事》

明成祖朱棣吩咐胡濙去做一件事,然后明成祖就去处理其它国家政事了,这期间明成祖朱棣可以不用关心胡濙。直到胡濙做完了,胡濙才主动汇报给朱棣。胡濙的汇报,就相当于android里的回掉了。

实例:熊大问熊二1+1=?,熊二一时也不知道答案,想了1分钟才告诉熊大答案是2。

(一)这里通过接口的方式实现。

/** * 我是熊大,我是一个Activity,问问题 */@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    //熊大问熊二: 1+1 = ?    BearTwo.excute(1, 1, new BearTwo.Response() {        @Override        public void rightResponse(int value) {            System.out.println("答案是:" + value);//熊二算出来了就主动告诉我,不用我去等待答案,不论是立刻还是1分钟后        }        @Override        public void errorResponse(String err) {            System.out.println("答案是:" + err);//熊二算出来了就主动告诉我,不用我去等待答案,不论是立刻还是1分钟后        }    });}
/*** 我是熊二,我是一个类,回答问题*/public class BearTwo {    public static void excute(int one, int two, Response response) {        try {            //。。。            //算了1分钟...            int resulte = one + two;            response.rightResponse(resulte); //算出来了        } catch (Exception e) {            response.errorResponse("算不出"); //算不出来        }    }    public interface Response {          public void rightResponse(int value);         public void errorResponse(String err);    }}

通过接口回调的方式至此已经全部完成。
通过接口回调的方式至此已经全部完成。
通过接口回调的方式至此已经全部完成。


(二)这里通过抽象类的方式实现。

//一个抽象类,里面的抽象方法子类必须实现,如果不实现则必须子类也定义成抽象类public abstract class BaseCalculation  {    public abstract void rightResponse(int value);    public abstract void errorResponse(String err);}
//继续看熊二,我是一个类,我来回答问题,我继承自一个抽象类//方式一中是有接口哦,这里没有~,注意这就是差别哦public class BearTwo extends BaseCalculation{    public  void excute(int one, int two) {        try {            //算了1分钟后...            int value = one * one;            rightResponse(value); //算出来了        } catch (Exception e) {            errorResponse("err"); //算不出来        }    }    @Override    public void rightResponse(int value) {    }    @Override    public void errorResponse(String err) {    }}
//最后看看雄大怎么来问问题呢@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    BearTwo bearTwo = new BearTwo() {        @Override        public void rightResponse(int value) {            edtResult.setText("熊二的答案是;" + value); //熊二算出来了就主动告诉我,不用我去等待答案,不论是立刻还是1分钟后        }        @Override        public void errorResponse(String err) {            edtResult.setText("熊二的答案是;" +err);  //熊二算出来了就主动告诉我,不用我去等待答案,不论是立刻还是1分钟后        }    };    bearTwo.excute(1, 1);//开始提问1+1=?,可以任何时候通过bearTwo.excute(1,1)问哦}

总结:这两种回调都非常有用,比如常见的应用在网络请求中,由于网络质量原因,我们并不清楚什么时候服务器才返回数据。而我们不能让用户一直卡在这里等待服务器的返回。所以最好的方式就是服务器返回了数据我们就解析,而不用去等待返回,其余时间用户完全可以干其它的操作。

*最后的最后看一张效果图
在界面中计算两个数的加法和乘法,逻辑部分在Acitiviy(熊大)中实现,而具体计算则在一个类中实现(熊二),然后将结果回调给Ativity。

这里写图片描述

1 0
原创粉丝点击