事实上,callback 机制在Android 中无处不在,特别是以Handler、Callback、Listener这三个词结尾的,都是利用callback机制来实现的。比方点击事件onClickListener就是一个已经封装好的callback案例:
tv.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub }
});
对于callback的概念及意义。*是这么解释:将一段代码作为參数传递,而这段代码将会在某个时刻被运行;
个人理解就是:为了代码整洁。为了方便调用并运行一些不在同一个java文件里的变量和函数;为了便于对外留出接口,便于后期加入新功能;
自己也写了一个比較简单的Demo例如以下:
/**
* @author Kern
* @data 2015-6-12下午4:21:29
* @TODO callback 首先:定义一个interface 包括一个或者多个没有方法体的回调方法
*/
public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // TextView tv = (TextView) findViewById(R.id.tv);
// tv.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
//
// }
// }); Utils utils = new Utils();
utils.execu(new ContrlListener() { @Override
public void contrl(String str) {
// TODO Auto-generated method stub Log.e("sos", str); }
}); } //定义接口
public interface ContrlListener { public void contrl(String str);
}
}
这里:接口ContrlListener中的方法 contrl(String str);没有方法体,后期维护中,须要新增功能时,就能够直接复写control函数。方法体中调用自己新增的功能实现代码就OK了。
/**
* @author Kern
* @data 2015-6-12下午5:07:21
* @TODO 第二步:获取接口对象,通过对象调用方法,
*
*/
public class Utils { ContrlListener listener; public void execu(ContrlListener listener) { this.listener = listener; new MyThread().start();
} class MyThread extends Thread { @Override
public void run() {
// TODO Auto-generated method stub
super.run(); try {
Thread.sleep(5000); for (int i = 0; i < 10; i++) { listener.contrl("电话正在接通中----" + i + 1);
Thread.sleep(3000);
} listener.contrl("hello,你哪位?");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}