Android中callback(接口回調)機制

事實上,callback 機制在Android 中無處不在,特別是以Handler、Callback、Listener這三個詞結尾的,都是利用callback機制來實現的。比方點擊事件onClickListener就是一個已經封裝好的callback案例:java


tv.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

			}
		});


對於callback的概念及意義。維基百科是這麼解釋:將一段代碼做爲參數傳遞,而這段代碼將會在某個時刻被運行;ide

 
 我的理解就是:爲了代碼整潔。爲了方便調用並運行一些不在同一個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();
			}
		}
	}
}
相關文章
相關標籤/搜索