Android ProcessLifecycleOwner observa el ciclo de vida del proceso

Introducción

ProcessLifecycleOwnerTraducción literal, es decir, el propietario del ciclo de vida del proceso.
Aprendido a través de los comentarios DOC:

  1. El evento Lifecycle.Event.ON_CREATE se recibirá una vez que comience el proceso;
  2. Evento Lifecycle.Event.ON_DESTROY, nunca recibido;
  3. 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;
  4. 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) 

LifecycleObserverMirando los comentarios DOC para , se recomienda no usar esta clase directamente; en su lugar, use sus subclases DefaultLifecycleObserveroLifecycleEventObserver

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 -> {
    
    }
        }
    }
})

Supongo que te gusta

Origin blog.csdn.net/jjwwmlp456/article/details/129047730
Recomendado
Clasificación