Directorio de artículos
Introducción
ProcessLifecycleOwner
Traducción literal, es decir, el propietario del ciclo de vida del proceso.
Aprendido a través de los comentarios DOC:
- El evento Lifecycle.Event.ON_CREATE se recibirá una vez que comience el proceso;
- Evento Lifecycle.Event.ON_DESTROY, nunca recibido;
- Después de onStart y onResume de la primera actividad, el propietario recibirá el mismo tipo de eventos Lifecycle.Event.ON_START, Lifecycle.Event.ON_RESUME;
- Después de onPause y onStop de la última actividad, el propietario recibirá el mismo tipo de eventos Lifecycle.Event.ON_PAUSE, Lifecycle.Event.ON_STOP (el sistema garantiza que los eventos recibidos son normales y no enviará
配置更改而销毁和重新创建活动
dichos eventos a tiempo)
Es muy conveniente juzgar el anverso y el reverso del proceso.
En sí mismo es una implementación singleton, código fuente:
@NonNull
public static LifecycleOwner get() {
return sInstance;
}
usar
confiar
api "androidx.lifecycle:lifecycle-process:2.5.1"
Uso 1, combinado con LiveData
La observación de los cambios de datos dependerá del evento de actividad del proceso.
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 -> {
}
}
})
Cabe señalar que las constantes en Lifecycle.State y Lifecycle.Event no tienen una correspondencia uno a uno.
A través de las pruebas, se encontró que cuando la aplicación regresa al primer plano desde el fondo, el registro imprimirá "estado: INICIADO"; cuando la aplicación esté en primer plano, cambie el valor de liveData, el registro imprimirá "estado: REANUDADO"
Uso 2, obtenga la instancia del ciclo de vida del propietario y agregue observadores al ciclo de vida
ProcessLifecycleOwner.get().lifecycle.addObserver(LifecycleObserver observer)
LifecycleObserver
Mirando los comentarios DOC para , se recomienda no usar esta clase directamente; en su lugar, use sus subclases DefaultLifecycleObserver
oLifecycleEventObserver
Ejemplo (se puede usar para juzgar el anverso y el reverso del proceso):
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 -> {
}
}
}
})