公式APIリファレンスやサイト、ChatGPTやGeminiの回答をみつつ、なんとなく雰囲気で理解したものを書き留める
📄 Window.Callback
💡こんな感じ
Window.Callback:テレビのリモコンの受信機
- チャンネルの変更を受信したらチャンネル変更の処理を呼ぶ
の動作を提供するAPI
Activity の Window に差し込む イベントフックのインターフェース
- Activity:ブラウン管テレビの筐体・制御基盤
- 電源切替・チャンネル操作等の全体としての動作を制御
- Window:テレビ画面
- ガラス面部分でここにViewをうつす
- View:表示内容
- Windowに表示される実際の内容
- イベントフック
- 餌のようなもの対応するイベントの発生を拾う機能
🛠 メソッド例
- dispatchKeyEvent(KeyEvent event)
- キーボード操作のイベントを監視して発火したら設定した所定の処理を呼ぶ
🌐 サイト
📄 ActivityLifecycleCallbacks
💡こんな感じ
Activityの監視者
- 現在アプリ上で起動(表示)中のActivityを取得・監視する
の動作を提供するAPI
Window.Callback と組み合わせてフックを最上位から仕込んだりする
-
ActivityLifecycleCallbacks
- 「今どの Activity が前面にあるか」を知る
- onActivityResumed で「表示中の Activity はこれ」と把握する
- そのタイミングでWindow.Callbackを差し込むんで監視対象を常に最新のActivityに付け替える
-
Window.Callback
- 差し込んだ対象Activityのキーイベント/タッチイベントなどをフック
- この中で各種処理(例:
TimeoutManager.reset()
)を呼ぶ - 実処理はそのメソッドに委譲する
🛠 メソッド例
- onActivityCreated(Activity activity, Bundle savedInstanceState)
- Activityで
super.onCreate()
が呼ばれたときに呼ばれる -
onCreate
の範囲をActivity全体に拡張したグレードアップ管理版イメージ
- Activityで
🌐 サイト
📄 extends と implements
💡こんな感じ
機能の詳細を知っているかどうかの違い
- extends:親の持つメソッドを丸ごと受け継ぐ形になるから機能の詳細を知っている
- implements:実装元がどんなメソッドを持つかしか知らないから機能の詳細を知らない
-
extends
- 親の方で
@Override
しているからsuper.
で親の該当メソッドにアクセスできる -
親クラス = 子クラス
みたいな関係感 - 開発者的知識感
- 親の方で
-
implements
- 実装元で
@Override
していないからsuper.
で該当メソッドにアクセスできない -
実装元 <-> 契約者
みたいな関係感 - 一般利用者的知識感
- 実装元で
🛠 コード例
// extends
public class SampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceSteate) {
super.onCreate(savedInstanceSteate) // 親のメソッドをそのまま使う
}
}
// implements
public class SampleCallback implements Window.Callback {
private final Window.Callback windowCallback;
public SampleCallback(Window.Callback windowCallback) {
this.windowCallback = windowCallback;
}
@Override
public boolean dispatchKeyEvent(KeyEvent keyEvent) {
return windowCallback.dispatchKeyEvent(keyEvent) // 実装元に処理委譲
}
}
🌐 サイト