Android原理——回调机制

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.2 A类 A类 B类 B类 setCallback(this) implements Callback onCallback() interface Callback{} Callback callback onCallback()

你可能感兴趣的:(接口,回调)