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();
			}
		}
	}
}


 
 

猜你喜欢

转载自blog.csdn.net/kern_/article/details/46473317