標籤:android callback
一.簡介,例子
CallBack是回調的意思,"回呼函數"或者"回調方法"是軟體設計與開發中一個非常重要的概念,掌握"回呼函數"的思想對程式員來說(不管用哪種語言)是非常必要的。
什麼是回呼函數呢?回呼函數就是預留給系統調用的函數,而且我們知道該函數被調用的時機。這裡有兩點需要注意:第一點,我們寫回呼函數不是給自己調用的,而是準備給系統在將來某一時刻調用的;第二點,我們應該知道系統在什麼情形下會調用我們寫的回呼函數。
舉個現實生活中"回呼函數"的例子,我們平時考試答題的第一件事是幹嘛?沒錯,是寫上學號和姓名。這裡注意了,我們填寫學號和姓名不是給自己看的(即該方法不是給自己調用的),而是給老師登記分數時看的(預留給系統將來調用),這其實就是一個回調的應用。
下面再來看一下Android中應用到"回調"的情境。
情境一:
<span style="font-family:Times New Roman;">Button button = (Button)this.findViewById(R.id.button);button.setOnClickListener(new Button.OnClickListener() { //回呼函數 @override publicvoid onClick(View v) { buttonTextView.setText("按鈕被點擊了"); }});</span>
上面的代碼給按鈕加了一個事件監聽器,這其實就是"回調"最常見的應用情境之一。我們自己不會顯示地去調用onClick方法。使用者觸發了該按鈕的點擊事件後,它會由Android系統來自動調用。
情境二:
<span style="font-family:Times New Roman;">@Overridepublicvoid onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); // You code...}@Overridepublicvoid onResume() { super.onResume(); // You code...}</span>
上面的方法大家就更熟悉了,這是Android系統在Activity類中設定的回呼函數,在Activity生命週期的不同階段,Android系統會自動調用相應的方法(onCreate, onPause, onResume,onDestroy等等)
以上是兩個Android中用到"回調"的情境,他們的代碼實現可能不同,但是思想上是相近的,都是"回調"思想的體現。下面,我們在Java中分別類比這兩個情境。
首先類比註冊事件監聽器。先寫一個監聽器介面
<span style="font-family:Times New Roman;">package com.listener;/** * 點擊監聽器介面 * */publicinterface MyOnClickListener { publicvoid onClick();}</span>
然後寫一個我們自己的Button類
<span style="font-family:Times New Roman;">package com.listener;publicclass MyButton { private MyOnClickListener listener; /** * 設定具體點擊監聽器 * @param listener 點擊監聽器實作類別 */ publicvoid setOnClickListener(MyOnClickListener listener) { this.listener = listener; } /** * 按鈕被點擊 */ publicvoid doClick() { listener.onClick(); }}</span>
最後類比Client端的註冊監聽器和觸發點擊操作。
<span style="font-family:Times New Roman;">package com.listener;publicclass Client { publicstaticvoid main(String[] args) { MyButton button =new MyButton(); //註冊監聽器 button.setOnClickListener(new MyOnClickListener() { @Override publicvoid onClick() { System.out.println("按鈕被點擊了"); } }); //類比使用者點擊 button.doClick(); }}</span>
以上就是"回調"思想在Android中事件監聽的運用,我們再類比第二個情境,"回調"在activity生命週期方法調用的體現。由於比較簡單,我就不多做解釋了,大家直接看代碼。
<span style="font-family:Times New Roman;">package com.activity;public abstract class Activity { protectedvoid onCreate() { System.out.println("建立準備~~~~~~~"); } protectedvoid onDestroy() { System.out.println("銷毀準備~~~~~~~~"); }}</span>
<span style="font-family:Times New Roman;">package com.activity;publicclass ConcreteActivity extends Activity { @Override protectedvoid onCreate() { super.onCreate(); System.out.println("建立中!!!"); } @Override protectedvoid onDestroy() { super.onDestroy(); System.out.println("銷毀中!!!"); }}</span>
<span style="font-family:Times New Roman;">package com.activity;publicclass Client { publicstaticvoid main(String[] args) { Activity activity =new ConcreteActivity(); activity.onCreate(); activity.onDestroy(); }}</span>
二.參考網址
1. http://xixinfei.iteye.com/blog/1306236
Android Callback淺談