Android原理——コールバックメカニズム
Androidコールバックメカニズム
コールバック関数は、呼び出し者と被呼び出し者を分離することができ、呼び出し者は誰が呼び出し者であるかに関心を持たず、呼び出し者は特定のプロトタイプと制限条件を持つ被変調関数を知るだけである.
1.コールバック関数を定義します.2.関数実装を提供する側は、初期化時にコールバック関数インタフェースを呼び出し者にインスタンス化する.3.特定のイベントまたは条件が発生した場合、呼び出し元はインタフェース呼び出しコールバック関数を使用してイベントを処理する.
Aクラスの中でBクラスのある方法Cを呼び出し、Bクラスの中で逆にAクラスの方法Dを呼び出し、Dという方法をコールバック方法と呼ぶ.
まずAndroidソースの古典的な例を引用します.
上の例ははっきり書いてありますが、ここではmarkdownで図を作ります.
Created with Raphaël 2.1.2 AクラスAクラスBクラスBクラスsetCallback(this)implements Callback onCallback()interface Callback{}Callback callback callback onCallback()
コールバック関数は、呼び出し者と被呼び出し者を分離することができ、呼び出し者は誰が呼び出し者であるかに関心を持たず、呼び出し者は特定のプロトタイプと制限条件を持つ被変調関数を知るだけである.
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 callback onCallback()