Android中callback(接口回调)机制
16lz
2021-01-23
其实,callback 机制在Android 中无处不在,特别是以Handler、Callback、Listener这三个词结尾的,都是利用callback机制来实现的。比如点击事件onClickListener就是一个已经封装好的callback案例:
tv.setOnClickListener(new OnClickListener() {@Overridepublic 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 {@Overrideprotected 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() {@Overridepublic void contrl(String str) {// TODO Auto-generated method stubLog.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 {@Overridepublic void run() {// TODO Auto-generated method stubsuper.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 blocke.printStackTrace();}}}}
更多相关文章
- 【Android】Android清除本地数据缓存代码
- 在Android中实现全屏显示的方法
- Mac完整卸载Android Studio的方法
- 【Android】Android处理Home键方法小结
- Android常用方法——获取系统信息
- 查看Android ADT Plugin版本的方法
- Android DEX 方法超过64K限制
- CyanogenMod开源代码