目录
1.首先定义一个回调接口。(就是在Andorid Studio里面新建java,选择interface)
2.定义一个接口帮助类,接口帮助类有方法里面有个参数以是这个接口类型的
网上看了一堆,感觉有点零散,我自己总结一下。
回调定义
正式定义
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript、Java等编程语言中可以使用仿函数或匿名函数。
通俗定义
在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
如下图:
更通俗解释:
- 小明写作业,遇到一道证明题,证明矩阵是正定的,但是小明不会啊,咋办呢?他就打了个电话给小红。
- xm:这个证明题怎么做啊?
- 但是小红的作业中并没有这道题.
- xh:你等我思考出来再告诉你。
- 小明听完后愉快地开机打游戏去了,约莫10分钟过去了,来电铃声突然想起,吓得小明手一抖就game over了,拿起手机一看,这不是小红嘛。
- xh:这道题的解决方法我消息发给你了。
- 于是乎salty fish小明就这样写完了作业。
回调机制
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
回调意义
方法回调是功能定义和功能分离的一种手段,是一种松耦合的设计思想。在JAVA中回调是通过接口来实现的。作为一种系统架构,必须要有自己的运行环境,并且要提供用户的实现接口。
接口(系统框架)是系统提供的,接口的实现是用户实现的。这样可以达到接口统一,实现不同。系统通过在不同的状态“回调”我们的实现类,来达到接口和实现的分离。
接口回调的实现步骤
1.首先定义一个回调接口。(就是在Andorid Studio里面新建java,选择interface)
package com.example.simplelayout;
//定义一个接口
public interface CallBack {
void solution(String str);
//可以在主类(MainActivity)里面重写这个接口函数
}
2.定义一个接口帮助类,接口帮助类有方法里面有个参数以是这个接口类型的
package com.example.simplelayout;
//接口帮助类
public class CallBackUtil {
//调用接口
private static CallBack cal;
public static void setCallBack(CallBack cbk){
cal=cbk;
}
public static void doCallBack(){
String info="you have done this!";
cal.solution(info);
}
}
3、具体调用类,及通过接口传递数据,主Activity。
package com.example.simplelayout;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.os.Handler;
public class MainActivity extends AppCompatActivity implements CallBack {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CallBackUtil.setCallBack(this);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
CallBackUtil.doCallBack();
}
}, 1000);
}
@Override
public void solution(String string) {
Log.e("Enoment", "receive method from CallBackUtil" + string);
}
}
参考
博客https://blog.csdn.net/u010566681/article/details/52371359
脚本之家
https://www.jb51.net/article/74194.htm
————————————————
转载于:https://blog.csdn.net/qq_43738932/article/details/118787289