事實上,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); } }
/** * @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(); } } } }