Android ProcessLifecycleOwner はプロセスのライフサイクルを監視します

序章

ProcessLifecycleOwner直訳すると、プロセスのライフサイクルの所有者です。
DOC のコメントから学んだこと:

  1. Lifecycle.Event.ON_CREATE イベントは、プロセスの開始後に 1 回受信されます。
  2. Lifecycle.Event.ON_DESTROY イベント、受信されませんでした。
  3. 最初のアクティビティの onStart と onResume の後、所有者は同じタイプのイベント Lifecycle.Event.ON_START、Lifecycle.Event.ON_RESUME を受け取ります。
  4. 最後のアクティビティの 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 -> {
    
    }
        }
    }
})

おすすめ

転載: blog.csdn.net/jjwwmlp456/article/details/129047730