</pre>網上很流行的一個例子就是<p></p><p>我有一個問題,然後我打電話給你,你思考下之後,將答案告訴我,</p><p>針對這個例子我們來實現我們的回調函數</p><p>1.我們先實現我們的這個例子的回調</p><p></p><pre name="code" class="java">/**
* 聯繫接口
* @author xuqunxing
*
*/
public interface ContactBack {
/**回答問題*/
public void answerQuestion(String answer);
}
2.實現我這個類裏面的方法
首先在我裏面要有一個打電話給你的方法,我取名爲beCall("問問題的人",“問題的名字”,回調函數)
3.實現你類裏面的思考一下,然後回答我的問題(首先要接收我的beCall方法裏面的各個參數)
這裏我讓You類實現Runnable類,實現run方法,在run方法中
@Override
public void run() {
System.out.println("你 正在想答案。。。");
//思考1秒
SystemClock.sleep(1000);
//回答答案,在me類中回調
contactBack.answerQuestion("你回答:傻逼,就是R平方=X平方+Y平方");
}
4.你的思考是一個耗時的方法,所以要在一個線程裏面,在我類裏面調用
//你思考的方法調用
new Thread(you).start();
綜上。就是我打電話給你,你思考後回到我的問題的回調實例,下面貼上所有的代碼
/**
* 我 (提出問題)
* @author xuqunxing
*
*/
public class Me {
public void askQuestion(){
System.out.println("我 提出問題:"+"勾股定理方程式這麼寫");
You you=new You();
you.beCall("高中同學","勾股定理方程式這麼寫",new ContactBack() {
//你思考之後,告訴我答案
@Override
public void answerQuestion(String answer) {
System.out.println("收到了答案:"+answer);
}
});
//你思考的方法調用
new Thread(you).start();
}
}
</pre><pre name="code" class="java">/**
* 你(回覆問題)
* @author xuqunxing
*
*/
public class You implements Runnable{
<span style="white-space:pre"> </span>String name;
<span style="white-space:pre"> </span>String question;
<span style="white-space:pre"> </span>ContactBack contactBack;
<span style="white-space:pre"> </span>//調用這個方法就表示有人打電話問你問題
<span style="white-space:pre"> </span>public void beCall(String name, String question, ContactBack contactBack) {
<span style="white-space:pre"> </span>this.contactBack=contactBack;
<span style="white-space:pre"> </span>this.name=name;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void run() {
<span style="white-space:pre"> </span>System.out.println("你 正在想答案。。。");
<span style="white-space:pre"> </span>//思考1秒
<span style="white-space:pre"> </span>SystemClock.sleep(1000);
<span style="white-space:pre"> </span>//回答答案,在me類中回調
<span style="white-space:pre"> </span>contactBack.answerQuestion("你回答:傻逼,就是R平方=X平方+Y平方");
<span style="white-space:pre"> </span>}
}
/**
* 聯繫接口
* @author xuqunxing
*
*/
public interface ContactBack {
<span style="white-space:pre"> </span>/**回答問題*/
<span style="white-space:pre"> </span>public void answerQuestion(String answer);
}
/**
* 主函數 類
* @author xuqunxing
*
*/
public class MainActivity extends ActionBarActivity {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>protected void onCreate(Bundle savedInstanceState) {
<span style="white-space:pre"> </span>super.onCreate(savedInstanceState);
<span style="white-space:pre"> </span>setContentView(R.layout.activity_main);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Me me=new Me();
<span style="white-space:pre"> </span>me.askQuestion();
<span style="white-space:pre"> </span>}
}
源碼:http://download.csdn.net/detail/iblue007/9146571查看日誌輸出: