JetPack学習のライフサイクルシリーズコース1
序文:
近年、Android テクノロジーのアップデートとイテレーションは比較的速く、毎年新しい知識が登場しています; 近年、著者の仕事の焦点はアプリから Android HAL レイヤーの開発に移行しています; HAL レイヤーの開発では、主に C 言語を使用しました. その過程で, コンピュータの基本的な知識についてほとんど知らないことに気づきました, そして、基本的な知識を再学習するのに多くの時間を費やしました. Android アプリの新しい知識に十分な投資をしなかった.主流の開発者のペースについていけなかった; 数年間、アプリ開発に戻り、もう一度 Android を学ぶ準備をしたい;
質問 1: LifecycleObserver のすべてのメソッドを基本クラスに実装し、次に特定のクラスで関与する必要があるライフサイクルのメソッドを書き換えます.ライフサイクルは、このようにして最終的に呼び出すクラスと関数をどのように認識しますか?
上記の質問は、次のコードによると、次のように説明できます: GenericLifecycleLocationListener は基底クラス、TestLifecycleLocationListener は具象クラス、Lifecycle は最終具象クラスの関数をどのように呼び出すか、基底クラスを介して呼び出されるか、または基本クラスを直接通過します
public class GenericLifecycleLocationListener implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreateX(LifecycleOwner owner) {
System.out.println("GenericLifecycleLocationListener onCreateX");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStartX(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestory(LifecycleOwner owner) {
}
}
public class TestLifecycleLocationListener extends GenericLifecycleLocationListener {
public TestLifecycleLocationListener(OnLocationChangedListener onLocationChangedListener) {
super(onLocationChangedListener);
}
@Override
void onCreateX(LifecycleOwner owner) {
super.onCreateX(owner);
System.out.println("TestLifecycleLocationListener onCreateX");
}
}
public class MainActivity extends ComponentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("MainActivity---> onCreate;");
getLifecycle().addObserver(new TestLifecycleLocationListener());
}
}
テスト インターフェイスで、次のメソッドを使用して Lifecycle を関連付けます。
getLifecycle().addObserver(new TestLifecycleLocationListener());
Java プロジェクトで Android 側の呼び出しをシミュレートすると、出力全体は次のようになります。
最終基底クラスの onCreateX と派生クラスの OnCreateX の両方が呼び出されることがわかります。