標籤:介面 回調
Android回調機制
回呼函數可以把調用者與被調用者分開,調用者不關心誰是被調用者,調用者只需知道具有特定原型和限制條件的被調函數。
1.定義一個回呼函數;
2.提供函數實現的一方在初始化的時候,將回呼函數的執行個體化介面提交給調用者;
3.當特定的事件或條件發生的時候,調用者使用介面調用回呼函數對事件進行處理。
看到過一句寫的比較好的描述:A類中調用B類的某個方法C,然後B類中反過來調用A類的方法D,D這個方法就叫回調方法
先引用一個Android源碼中經典的例子:
//介面類, B類實現介面,A類調用介面 public interface OnClickListener { void onClick(View v); }
//相當於A類 public class MainActivity extends Activity implements OnClickListener{ private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button1); // A類執行個體化介面 button.setOnClickListener(this); } @Override public void onClick(View v) { // 回呼函數 }}
// 相當於B類public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { // 介面執行個體 protected OnClickListener mOnClickListener; // 介面執行個體化 public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } mOnClickListener = l; } public boolean performClick() { if (mOnClickListener != null) { //B類調用A類的實現方法 mOnClickListener.onClick(this); return true; } return false; } }
上面的例子寫的很清楚,這裡我用markdown做個圖表示:
Created with Rapha?l 2.1.2A類A類B類B類setCallback(this)implements CallbackonCallback()interface Callback{}Callback callbackonCallback()
Android原理——回調機制