淺談Android中Callback(回調)的使用

   

       今天項目的Bug基本修改完成了,於是就對自己還未了解的回調函數進行了學習。就得到的結果來看,個人覺得回調就像多態一樣,比如Boss叫員工去吃飯,但每個員工可能吃不同的食物。只不過,回調是對接口而言。簡單來說就是,A對象調用了自己的方法a,方法a接收的參數是B接口的實例b,而在方法a中將執行接口B中的方法c。這樣解釋可能有點繞不過來,下面我們來看一個例子。

       比如宿舍的某個同學設置了一個鬧鈴,鬧鈴響時全宿舍的人都能聽到,但是張三比較勤奮,聽到鈴聲後起牀了,李四比較懶,聽到鈴聲後還要睡會。我們可以把鬧鈴發出的鈴聲看作是接口,張三和李四都實現了這個“接口”,鬧鈴到一定時間後就要“響鈴”,響鈴就要發出“鈴聲”,“鈴聲”就去叫人,至於人會做什麼就是人本身的事情。下面看個代碼。

1.接口CallPerson

  1. public interface CallPerson { 
  2.      
  3.     public abstract void doCallPerson (); 
  4.  

定義了一個“叫人”的方法。實現這個接口可理解成安裝了鬧鈴。

2.類Zhangsan

  1. public class Zhangsan implements CallPerson { 
  2.      
  3.     String name = "Zhangsan"
  4.      
  5.     public String getName () { 
  6.         return name; 
  7.     } 
  8.  
  9.     @Override 
  10.     public void doCallPerson() { 
  11.         System.out.println(getName() + "聽到鈴聲,勤鳥,起牀了!"); 
  12.     } 
  13.  
  14.      

3.類Lisi

  1. public class Lisi implements CallPerson { 
  2.     String name = "Lisi"
  3.      
  4.     public String getName () { 
  5.         return name; 
  6.     } 
  7.  
  8.     @Override 
  9.     public void doCallPerson() { 
  10.         System.out.println(getName() + "聽到鈴聲,懶豬,沒起牀!"); 
  11.     } 
  12.      

4.類Alarm

  1. public class Alarm { 
  2.      
  3.     //響鈴
  4.     public void ring (CallPerson callPerson) { 
  5.         callPerson.doCallPerson(); 
  6.     } 
  7.  

5.Activity

然後我們在Activity裏模擬鬧鈴開始響鈴

  1. import android.os.Bundle; 
  2. import android.app.Activity; 
  3.  
  4. public class MainActivity extends Activity { 
  5.  
  6.     @Override 
  7.     public void onCreate(Bundle savedInstanceState) { 
  8.         super.onCreate(savedInstanceState); 
  9.         setContentView(R.layout.layout_main); 
  10.          
  11.         Alarm alarm = new Alarm(); 
  12.         Zhangsan zhangsan = new Zhangsan(); 
  13.         Lisi lisi = new Lisi(); 
  14.          
  15.         //模擬鬧鈴定時時間到,然後響鈴 
  16.         alarm.ring(zhangsan); 
  17.         alarm.ring(lisi); 
  18.     } 
  19.  

 最後,我們來看看執行的結果

  1. 12-07 21:49:41.947: INFO/System.out(6107): Zhangsan聽到鈴聲,勤鳥,起牀了! 
  2. 12-07 21:49:41.947: INFO/System.out(6107): Lisi聽到鈴聲,懶豬,沒起牀! 

好了,這就是我對回調的理解,如有不對之處望大家指出,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章