java回调机制

442 阅读2分钟

序言:讲个简单的例子,当A让B帮忙做某件事的时候,恰巧B在忙于另外一件事,这时候B对A说你先做你自己的事,等我把手头上的事做完我再找你,然后再帮你做,那B做完去找A的这个动作就可以称为回调。下面进入demo:

1、首先定义一个接口,在这我叫做MyCallBack

public interface MyCallBack {
    void save(String result);
}

2、然后定义两个类A和B,分别表示A和B两个人,A类:

public class A implements MyCallBack {
	private B b;
	public A(B b) {
		this.b = b;
	}
	/**
 	* A通过这个方法向B提问
 	*/
	public void askQuestion(final String question) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				b.executeMessage(A.this, question);
				System.out.println("第二步:A去做自己的事去了,等B好了再通知A");
			}
		}).start();
	}

	@Override
	public void save(String result) {
		System.out.println("第五步:B通知A他做完了事,可以帮A做事情了" + result);
	}
}

B类:

public class B {
	/**
	 * 相当于B类有参数为CallBack callBack的f()---->背景三
	 * 
	 * @param callBack 回调接口
	 * @param question A让B做的事
	 */
	public void executeMessage(final CallBack callBack, String question) {
		System.out.println(question);
		// 模拟B办自己的事情需要很长时间
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("第三步:B去做自己的事了");
				try {
					Thread.sleep(10000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("第四步:B做完自己的事了");
				/**
				 * B办完自己的事情之后立刻通知A他现在有空了
				 */
				String result = "";
				/**
			 	 * 于是就告诉A,调用A中的方法 这就相当于B类反过来调用A类的方法D
			 	 */
				callBack.save(result);
			}
		}).start();
	}
}

3、在写一个测试类,来测试这个接口:Test类

public class Test {
    public static void main(String[] args) {
	    /**
	     * new 一个B
	     */
	    B b = new B();
	    /**
	     * new 一个A
	     */
	    A a = new A(b);
	    /**
	     * A让B帮忙做事
	     */
	    a.askQuestion("第一步:A让B帮忙!!!!");
}

4、运行结果:

运行结果

好了,最简单的回调就到这里了

公众号:Android技术经验分享