如何理解android的函数,通过Android源码理解回调函数
概述
我們先看一下維基百科對回調函數的定義:
在計算機程序設計中,回調函數,或簡稱回調(Callback 即call then back 被主函數調用運算后會返回主函數),是指通過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用。這一設計允許了底層代碼調用在高層定義的子程序。
舉個栗子
我們看一下android中最經典的View.setOnClickListener()源碼:
1.定義接口
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
2.注冊回調函數
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
3.執行回調函數
/**
* Call this view's OnClickListener, if it is defined. Performs all normal
* actions associated with clicking: reporting accessibility event, playing
* a sound, etc.
*
* @return True there was an assigned OnClickListener that was called, false
* otherwise is returned.
*/
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);
return result;
}
4.調用View的注冊回調函數方法
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do something
}
});
ok了,這樣就完成了一次完整的回調函數.
總結一下
首先,在MainActivity中通過View中的setOnclickListener方法的參數將OnClickListener 接口的實現者傳給了View,最終在被點擊時在performClick方法中,執行了實現者的onClick方法.
是不是就如維基百科上的回調定義:通過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用.O(∩_∩)O.
總結
以上是生活随笔為你收集整理的如何理解android的函数,通过Android源码理解回调函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中astr是啥_python
- 下一篇: jpa onetoone_拥抱开源从表设