入行很久了,一直没有学会总结,每次遇到以前解决过的问题,但又想不出之前是怎么解决的时候总是要耗费好多的时间再去思考,再去查阅资料,最近突然感悟到了,想为自己整理总结常用的东西。

1.什么是回调函数     

在C或者C++中回调函数的定义:程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数)。Java中没有指针,不能传递方法的地址,一般采用接口回调实现:把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。

2.java回调函数的实现机制
  (1)定义一个回调函数的接口Callback

  (2)在调用的类中Caller中声明一个 Callback 对象并实现。(在android中我们进程实用内部类的方法对callback进行处理)

  (3)当特定条件或事件发生时,调用函数使用回调函数Callback的实现,对事件进行处理。

3.举例说明



package com.trace;

public class View {
	private OnTouchListener onTouchListener;
	public void setOnTouchListener(OnTouchListener onTouchListener){
		this.onTouchListener = onTouchListener;
	}
	
	public void OnViewTouch(){
		if(onTouchListener!=null){
			onTouchListener.onTouch("123");
		}
	}
	
	public interface OnTouchListener{
		boolean onTouch(String event);
	}
}



 这是模仿android view的touch事件



package com.trace;

public class ViewImpl implements View.OnTouchListener{
	
	@Override
	public boolean onTouch(String event) {
		// TODO Auto-generated method stub
		System.out.println(event);
		return false;
	}
	
	public static void main(String[] args){
		View view = new View();
		view.setOnTouchListener(new ViewImpl());
		view.OnViewTouch();
	}
}



这里可以理解为android 中的 button,textview 等视图组建,main函数可以理解为android中一个activity, view.OnViewTouch()可以理解为android touch事件的触发。我们可以看到运行的结果是输出123。这就验证了 当特定条件或事件发生时, 调用函数使用回调函数Callback的实现,对事件进行处理 这句话。 

4.结合android 小结一下回调事件

  android中大量使用了回调机制,如view 中的 onClick(), onLongClick(), onTouch(), onCreateContextMenu() 等。所以掌握好回调函数,有利于我们理解android的事件机制。

     总之回调函数就是通过实现类来完成实际要操作的动作。