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.总结
讲解了自己对回调的理解,写了文章之后加深了印象,本人还处于学习阶段,若有不正确的地方还请指出。
来源:CSDN
作者:新进小菜鸡
链接:https://blog.csdn.net/qq_45757054/article/details/104505998