java 回调机制

本贴最后更新于 2861 天前,其中的信息可能已经天翻地覆

在很多 java 源码中,经常能看得到接口回调,这个接口回调到底是几个意思呢,根据如下问题,通过详细的查询并学习文档,才搞明白这个回调是几个意思,写在这里做个备份 #

基于我对接口回调的理解,做了如下的场景说明:

1、A、B 2 个人 都很忙

2、A 给 B 打电话问问题 , A 问完了问题以后就挂了电话,但是 B 不能及时回复 A ,等 B 能够回复的时候,需要去调用 A 的方法

A 对象

// 回调接口
interface CallBack{
	// 回调函数
	public void solve(String result);
}
class A implements CallBack{
	// A要询问B,所以A必须持有B对象
	private B b;
	public A(B b) {
		this.b = b;
	}
	// 异步回调
	public void askBQuestion(final String question){
		new Thread(new Runnable() {
			public void run() {
				// 调用B的方法
				b.execute(A.this, question);
			}
		}).start();
		System.out.println("1.A问B:"+question+",A问完了问题,然后就挂了电话,做别的事情去了");
	}	
	
	@Override
	public void solve(String result) {
		System.out.println("3.B告诉A的"+result);
	}
}

B 对象

class B{
	public void execute(CallBack callBack,String question){
		System.out.println("2.B收到了"+question+",但是B在忙,没能及时回复A,过了一会");
		// 模拟B在忙,不能及时回复
		for (int i = 0; i < 10000; i++) {}
		// B给A打电话,告诉结果[B调用了A中的方法]
		callBack.solve("结果是1+1=2");
	}
}

测试

public class InterfaceCallDemo {
	public static void main(String[] args) {
		// 打电话demo,异步回调
		B b = new B();
		// A 对象需要调用B对象
		A a = new A(b);
		a.askBQuestion("1+1=?");
	}
}

场景结果可能有差异,因为不是一个线程在跑,可能出现抢占资源的情况

基于以上的场景在来模拟安卓的事件调用

主界面

// 模拟主界面
class Activity{
	public void testClickEvent(){
		View btn  = new View("terry");
		//调用B方法
		btn.setmOnClick(new View.OnClick() {
			@Override
			public void fun(String result) {	
				System.out.println("4.Button的点击事件成功,获得了内容:"+result);
			}
		});
	}
}

View

// 模拟view
@SuppressWarnings("all")
class View {
	private String  text;
	public void setText(String text) {
		this.text = text;
	}
	public View(String text) {
		this.text = text;
	}

	// 回调接口和回调方法
	public interface OnClick{
		void fun(String result );
	}
	private OnClick mOnClick;
	public void setmOnClick(OnClick mOnClick) {
		this.mOnClick = mOnClick;
		// 模拟点击事件
		if(null != mOnClick){
			// 同步
			mOnClick.fun(this.text);
		}
	}
}

测试

public class InterfaceCallDemo {
	public static void main(String[] args) {
		// 模拟android.OnCLick  同步回调
		 Activity activity = new Activity();
		 activity.testClickEvent();
	}
}

查看结果

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...