定義一組方法契約,規範「能做什麼」。例如:
public interface OnPaintListener {
void onPaintStarted();
void onPaintFinished();
}
用於**解耦**:調用者不關心具體實現,只依賴接口。
是**接口的一種具體應用模式**,專門用於「事件發生時回調」。典型結構:
public class Button {
private OnClickListener listener;
public void setOnClickListener(OnClickListener l) { this.listener = l; }
private void notifyClick() { if (listener != null) listener.onClick(this); }
}
Android 中 View.OnClickListener、TextWatcher 皆屬此類。
Android 特有機制,**用於線程間通訊**,將任務(Message/Runnable)投遞到關聯線程的消息隊列。核心用途:
| 維度 | Interface | Listener | Handler |
|---|---|---|---|
| 本質 | 契約定義 | 事件回調模式 | 線程消息分發器 |
| 典型場景 | 多態、插件化 | 按鈕點擊、文字變化、滑動事件 | 子線程→主線程、延遲任務 |
| 執行線程 | 調用者線程 | 事件觸發線程(通常主線程) | 目標線程(Looper 所在線程) |
On...Listener 或 ...Callback 結尾。Handler 或 runOnUiThread,不要在監聽器裡直接做耗時操作。