序章
ProcessLifecycleOwner
直訳すると、プロセスのライフサイクルの所有者です。
DOC のコメントから学んだこと:
- Lifecycle.Event.ON_CREATE イベントは、プロセスの開始後に 1 回受信されます。
- Lifecycle.Event.ON_DESTROY イベント、受信されませんでした。
- 最初のアクティビティの onStart と onResume の後、所有者は同じタイプのイベント Lifecycle.Event.ON_START、Lifecycle.Event.ON_RESUME を受け取ります。
- 最後のアクティビティの onPause および onStop の後、所有者は同じタイプのイベント Lifecycle.Event.ON_PAUSE、Lifecycle.Event.ON_STOP を受信します (システムは、受信したイベントが正常であることを保証し、そのようなイベントは時間内に送信しません)
配置更改而销毁和重新创建活动
。
工程の前後を判断するのにとても便利です
それ自体はシングルトン実装であり、ソースコードは次のとおりです。
@NonNull
public static LifecycleOwner get() {
return sInstance;
}
使用
頼る
api "androidx.lifecycle:lifecycle-process:2.5.1"
使い方 1、LiveData と組み合わせた場合
データ変更の観察は、プロセスのアクティビティ イベントによって異なります。
liveData.observe(ProcessLifecycleOwner.get(), Observer {
when (ProcessLifecycleOwner.get().lifecycle.currentState) {
Log.i("ProcessLifecycleOwner", "state: ${
ProcessLifecycleOwner.get().lifecycle.currentState}")
Lifecycle.State.STARTED, Lifecycle.State.RESUMED -> {
...
}
else -> {
}
}
})
Lifecycle.State と Lifecycle.Event の定数は 1 対 1 に対応していないことに注意してください。
テストを通じて、アプリケーションがバックグラウンドからフォアグラウンドに戻ると、ログに「state:」が出力されることがわかりました。 STARTED"; アプリケーションがフォアグラウンドにあるときに、liveData の値を変更すると、ログに "state: RESUMED" が出力されます。
使用法 2、所有者のライフサイクル インスタンスを取得し、ライフサイクルにオブザーバーを追加します。
ProcessLifecycleOwner.get().lifecycle.addObserver(LifecycleObserver observer)
LifecycleObserver
の DOC コメントを見ると、このクラスを直接使用せず、代わりにそのサブクラスDefaultLifecycleObserver
またはLifecycleEventObserver
例(プロセスの前後を判断するために使用できます):
ProcessLifecycleOwner.get().lifecycle.addObserver(object: DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
}
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
}
override fun onResume(owner: LifecycleOwner) {
// 应用前台
super.onResume(owner)
}
override fun onPause(owner: LifecycleOwner) {
// 应用后台
super.onPause(owner)
}
override fun onStop(owner: LifecycleOwner) {
super.onStop(owner)
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
}
})
ProcessLifecycleOwner.get().lifecycle.addObserver(object: LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
when (event) {
Lifecycle.Event.ON_CREATE -> {
Log.e("ProcessLifecycleOwner", "ON_CREATE")
}
Lifecycle.Event.ON_START -> {
Log.e("ProcessLifecycleOwner", "ON_START")
}
Lifecycle.Event.ON_RESUME -> {
// 应用前台
Log.e("ProcessLifecycleOwner", "ON_RESUME")
}
Lifecycle.Event.ON_PAUSE -> {
// 应用后台
Log.e("ProcessLifecycleOwner", "ON_PAUSE")
}
Lifecycle.Event.ON_STOP -> {
Log.e("ProcessLifecycleOwner", "ON_STOP")
}
else -> {
}
}
}
})