我以為【接口回調】是一個流程或是機制
即從【實作接口方法】到【調用接口方法】這一個完整的“過程”
1.【接口方法】
網絡上有許多種不同的叫法,諸如:接口方法 接口函數 回調方法 回調函數等
在我的了解裡接口方法指的是
接口中的方法(沒有具體實作)
例如
(Android中的展現,官方源碼)
public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); }
void onClick(View v);即接口方法
2.【實作接口方法】/【接口方法的實作】
以上2種說法統統指的是 onClik方法的具體實作
例如
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//to do something..
}
});
其中 onClick方法的具體實作就是以上2種說法的本意
值得一提的是關于暴露設定接口方法(注冊接口)的意思
我們可以看到上面的例子中setOnClickListener方法就是注冊接口
它在官方源碼中是如何的呢?
> public void setOnClickListener(@Nullable OnClickListener l) { > if (!isClickable()) { > setClickable(true); > } > getListenerInfo().mOnClickListener = l; > }
我們暫且不需要知道官方的具體實作做了些什麼
但是可以很清楚的看到 public void setOnClickListener(@Nullable OnClickListener l)
中傳入的是一個接口變量 (OnClickListener l)
在本例中就是通過setOnClickListener方法注冊接口(并通過匿名内部類的方式實作接口)完成接口的注冊的。
那麼重頭戲來了 接口真正的調用在哪呢?
public boolean performClick() {
final boolean result;
final ListenerInfo li = mListenerInfo;
if (li != null && li.mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
li.mOnClickListener.onClick(this);//沒錯就在這裡!!
result = true;
} else {
result = false;
}
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
notifyEnterOrExitForAutoFillIfNeeded(true);
return result;
}
我們同樣不關心該方法的具體實作,
但是OnClick接口在這裡被調用了
有人會認為這個就是接口回調的意思
即接口的具體實作和接口的調用在不同的地方
因為我在開頭就已經認定接口回調是一個機制或者說是流程
是以我認為這裡是一個【接口的調用】
總結【接口回調】流程
硬體(手機)被觸摸或是長按等操作->android系統會調用performClick()方法->
performClick()方法調用接口方法(onclick)->onclick是通過暴露接口(注冊接口)方法
setonclicklistener來讓程式員實作具體的接口方法
而這整個過程即接口回調
以上僅是我個人了解,如有纰漏或是錯誤
請發郵件[email protected]給我留言