java、android 回调函数
入行很久了,一直没有学会总结,每次遇到以前解决过的问题,但又想不出之前是怎么解决的时候总是要耗费好多的时间再去思考,再去查阅资料,最近突然感悟到了,想为自己整理总结常用的东西。
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的事件机制。
总之回调函数就是通过实现类来完成实际要操作的动作。