在安卓學習過程中經常聽到回調函數,也經常用到回調函數,但只是有這個概念,並不清楚具體回調函數的運行機制。網上看了許多博客,大都採用代碼分析。這裏我們採用代碼結合圖例進行分析講解。
先來看下回調的含義。就是A類中調用B類中的某個方法C,然後B類中反過來調用A類中的方法D,D這個方法就叫回調方法。反正這說法我也看的模糊。
那我們在來看個通俗點的說法。有一天老王遇到一個很難的問題,問題是“1 + 1 = ?”,就打電話問小李,小李一下子也不知道,就跟老王說,等我辦完手上的事情,就去想想答案,老王也不會傻傻的拿着電話去等小李的答案吧,於是老王就對小李說,我還要去逛街,你知道了答案就打我電話告訴我,於是掛了電話,自己辦自己的事情,過了一個小時,小李打了老王的電話,告訴他答案是2。
這個例子很形象的說明了回調的作用。那麼我們結合代碼來分析下回調的過程。
我們先定義個接口。用於回調,用於答覆問題。
public interface callback {
public void reply(String str);
}
老王要問小李個問題。
public class Wang implements callback{
//老王要和小李聯繫,持有小李的對象.
private Li li;
public Wang(Li li) {
this.li = li;
}
public void askQuestion(final String question){
new Thread(){
@Override
public void run() {
//註冊回調接口(老王講自身的接口和問題傳入,等待答覆)
li.executeMessage(Wang.this, question);
}
}.start();
}
@Override
public void reply(String str) {
//等待回覆的結果.小李會利用這個方法來回復
System.out.println(str);
}
}
小李利用接口回調回答老王問題。
public class Li {
public void executeMessage(callback call,String question){
System.out.println(question);
//根據老王傳入的接口,調用老王的reply方法對老王的問題進行回覆。
call.reply("小李:老王你個逗逼1+1=2");
}
}
測試方法
public class Main {
public static void main(String[] args) {
Li li = new Li();
Wang w = new Wang(li);
w.askQuestion("老王:小李我問你個問題:1+1=?");
}
}
測試結果
老王:小李我問你個問題:1+1=?
小李:老王你個逗逼1+1=2
看完代碼相信你應該已經明白了大半,如果還不明白我們在結合圖例來進行分析一下。
看完這個圖片相信你應該能明白這個整個的流程,老王和小李其實是藉助這個接口進行通訊。
這篇文章參考了xiaanming的博客,對其進行了簡化以方便初學者理解回調機制的流程。(http://blog.csdn.net/xiaanming/article/details/17483273)