当前位置: 首页 > news >正文

Android中callback(接口回调)机制

事实上,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();
			}
		}
	}
}


 
  

相关文章:

  • 模式探索仍有心结,呷哺呷哺应该投入智能科技的怀抱?
  • HTTP请求中POST与GET的差别
  • DESTOON7.0农产品B2B供应求购交易平台源码
  • Python学习笔记
  • 基于DevExpress的Winform程序安装包的制作
  • RocketMQ 基本概念
  • 学习设计接口api(转)
  • 【刘文彬】EOS技术研究:合约与数据库交互
  • Altium Designer 8.0不为人知的27个技巧
  • React-redux的原理以及使用
  • Spring MVC JSP页面加载不完全的问题
  • 工程师笔记|浅析AI平台的架构设计
  • Spark 1.0.0 横空出世 Spark on Yarn 部署(Hadoop 2.4)
  • 使用docker遇到的问题
  • 武汉区块链软件技术公司:区块链将如何优化产业链?
  • ----------
  • 网络传输文件的问题
  • 2017年终总结、随想
  • CSS 提示工具(Tooltip)
  • Nodejs和JavaWeb协助开发
  • oschina
  • REST架构的思考
  • scala基础语法(二)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue-cli3搭建项目
  • 从零开始学习部署
  • 大快搜索数据爬虫技术实例安装教学篇
  • 和 || 运算
  • 解析 Webpack中import、require、按需加载的执行过程
  • 普通函数和构造函数的区别
  • 前端性能优化——回流与重绘
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微服务入门【系列视频课程】
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序开发之路(一)
  • 延迟脚本的方式
  • 一些关于Rust在2019年的思考
  • No resource identifier found for attribute,RxJava之zip操作符
  • 阿里云ACE认证之理解CDN技术
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #1015 : KMP算法
  • #LLM入门|Prompt#3.3_存储_Memory
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)计算机毕业设计大学生兼职系统
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (顺序)容器的好伴侣 --- 容器适配器
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转) ns2/nam与nam实现相关的文件
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据