对于java接口回调的理解

丶灬走出姿态 提交于 2020-02-28 00:32:59

2020.2.25
第一次写博客,有很多不足之处,还请多多包涵。
在Android中接口的回调是很常见的。这篇文章也是本人对其的理解,也算是一种学习记录。废话不多说,正文开始。

1.回调

回调(外文名Callback),是指在价格上涨趋势中,价格由于上涨速度太快,受到卖方打压而暂时回落的现象。回调幅度小于上涨幅度,回调后将恢复上涨趋势。
当然这并不是我今天要讲的回调。软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。这篇文章只进行简单的理解。我看完回调的概念也是马马虎虎,是懂非懂。但也可以形象化的理解。

同步回调

同步回调就像是老师叫小明交作业,小明就去写作业,而老师要等小明把作业叫上来才能批改作业,这里老师不用去管小明的作业是否正确。

public interface Callback{
 void PutOn();
}

老师的类

punlic class Teacher implements Callback{
 public Teacher(){
 System.out.println("小明快交作业");
}
 pubic void get(){
 System.out.println("我收到了")}
} 

小明的类

public class Xiaoming{

 private Callback callback;
 
 public Xiaoming(){
}
public Xiaoming(Callback callback){
this.callback=callback;
}

public void Puton(){
System.out.println("我上交作业了");
}
callbak.get();
}

main

public static void main(String[]args){
  Xiaoming xiaoming=new xiaoming(teacher);
  Teacher teacher=new Teacher();
 xiaoming.Puton();
}

老师->小明->老师

异步回调

像上面的情况会发现,老师不可能在小明做作业的期间不做任何事情,这个时候我们就需要异步回调来处理。

public interface Callback{
 void PutOn(String result);
}
public class Xiaoming{ 
 public void do(Callback callback,String doworek){
  /*
  出现空白期
  */
  new Thread(new Runnable(){
  @Overried
  pubiic void run(){
  try{
  Thread.sleep(8000);
  }catch(Exception e){
  e.printStackTrace();
}
callback.PutOn("我做完了")
}
}).start();
 }

}
punlic class Teacher implements Callback{
private Xiaoming teacherOrder;
Teacher(Xiaoming xiaoming){
this.teacherOrder=xiaoming;
}
/*
此处老师在等小明做作业时,在做其他事情
*/
 public void ask(Callback callback,String doworek){
 new Thread(new Runnable(){
  @Overried
  pubiic void run(){
  teacherOrder.do(Teacher.this,doworek);
  }
 }).start();
 @Overried
 public void PutOn(String result){
 System,out.println(result);
Sytem.out.println("我备课也备好了")}
}
public static void main(String[]args){
Teacher teacher=new teather();
System.out.println("小明快交作业");
teacher.ask();
System.out.println("我去备课了");
}

这样异步回调应该就好理解多了吧。在网络请求中也经常用到这里的知识,那就开始网络请求的回调吧。

2.网络请求中的回调

接口回调在网络请求时是十分重要的,我们在处理一些数据时,如果一直是主线程,那是很让人感到烦劳的,所以我们开辟新的线程,在新的线程处理数据,在网络请求结束后,更新线程的数据。

public interface Callback{
 void onFinish(String response); 
 void onError(Exception e);
}
public class HttpUtil{
 public void requestData(final String url,final Callback callback){
 //网络请求
 try{
 //相关逻辑省略
  if (listener != null) {
     // 回调onFinish()方法 
   listener.onFinish(response.toString()); 
   } catch (Exception e) { 
           if (listener != null) {
          // 回调onError()方法
       listener.onError(e); 
    }

  }
}
Httptil.sendHttReqyest(address,new Callback(){
 @Overried
 public void onFinish(String response){
 //根据返回内容执行具体逻辑
 }
  public void onError(Exception e){
 //处理异常
 }

});

《第一行代码》中的列子,省略了HttpUtil中的一些逻辑,但也是一个不错的例子

3.总结

讲解了自己对回调的理解,写了文章之后加深了印象,本人还处于学习阶段,若有不正确的地方还请指出。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!