Android中的回調其實就是:
A類調用B類的方法,B類需要時間處理,當B類處理完成後通過調用A類的方法把結果回傳給A類。
舉個網上很流行的例子:
你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裏留下了電話,過了幾天店裏有貨了,店員就打了你的電話,然後你接到電話後就到店裏去取了貨。
在這個例子裏,你的電話號碼就叫回調函數,你把電話留給店員就叫登記回調函數,店裏後來有貨了叫做觸發了回調關聯的事件,店員給你打電話叫做調用回調函數,你到店裏去取貨叫做響應回調事件。
示例代碼
- 回調監聽
public interface CallbackListener {
void method1();
void method2();
}
- B類:將結果通過方法回調給調用方
public class AssistClass {
public boolean doSomething(final CallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
listener.method1();
Thread.sleep(1000);
listener.method2();
}catch (Exception e){
Log.i("yico",e.toString());
}
}
}).start();
return true;
}
}
- A類:註冊回調,調用B類方法
public class ActivityCallback extends AppCompatActivity implements CallbackListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_callback);
Button btn_start = (Button) this.findViewById(R.id.btn_start);
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AssistClass c = new AssistClass();
boolean b = c.doSomething(ActivityCallback.this);
Log.i("yico", "b = " + b);
}
});
}
@Override
public void method1() {
Log.i("yico", "method1");
}
@Override
public void method2() {
Log.i("yico", "method2");
}
}