Componente de Android Jetpack (1) LifeCycle

Artículos de la serie de componentes Android Jetpack: Componente
Android Jetpack (1) Componente LifeCycle
Android Jetpack (2) Navegación
Componente Android Jetpack (3) ViewModel Componente
Android Jetpack (4) LiveData Componente
Android Jetpack (5)
Componente Room Android JetPack (6) Enlace de datos
Android Jetpack Componentes (7) Paginación de
componentes de Android Jetpack (8) WorkManager

Primer idioma

¡El 4 de marzo, Google lanzó Flutter 2 ! Como una actualización importante de Flutter, los desarrolladores que usan Flutter 2 pueden usar el mismo código para publicar aplicaciones desarrolladas con Flutter en cinco sistemas operativos: iOS, Android, Windows, macOS y Linux; y en la web. versión que se ejecuta en navegadores como Chrome, Firefo, Safari o Edge, Flutter puede incluso integrarse en automóviles, televisores y electrodomésticos inteligentes.
Como desarrollador de Flutter, inmediatamente descargué el Flutter 2.0 sdk y ejecuté mi proyecto Flutter en Chrome. El efecto fue muy bueno, pero hubo algunas diferencias en el código, el lado web no admitía imágenes y el paquete io de dart, etc. Puedes consultar las diferencias específicas en el sitio web oficial de Flutter . Publique una representación del lado web.
Aleteo 2

Introducción

En la conferencia Google I / O en 2017, Google lanzó AAC (Componentes de arquitectura de Android), que incluye componentes diseñados específicamente para arquitectura como LiveData, ViewModel y Room. AAC también se puede utilizar como predecesor de Jetpack. En la Conferencia de E / S de Google de 2018, Google lanzó Jetpack sobre la base de AAC.

Jetpack es un conjunto de múltiples bibliotecas que puede ayudar a los desarrolladores a seguir las mejores prácticas, reducir el código repetitivo y escribir código que se pueda ejecutar de manera consistente en varias versiones y dispositivos de Android, lo que permite a los desarrolladores concentrarse en escribir código importante.
Jetpack incluye principalmente los siguientes cuatro aspectos, a saber, arquitectura (Arquitectura), interfaz (UI), comportamiento (Comportamiento) y fundamento (Fundamento).

  • Los componentes de la arquitectura pueden ayudarlo a diseñar aplicaciones robustas, probables y fáciles de mantener.
  • Los componentes de Foundation proporcionan funciones de dominio cruzado, como compatibilidad con versiones anteriores, pruebas y compatibilidad con el lenguaje Kotlin.
  • Los componentes Ul proporcionan widgets y ayudantes, lo que hace que la aplicación no solo sea fácil de usar, sino también agradable de usar.
  • El componente de comportamiento ayuda a las aplicaciones a integrarse con los servicios estándar de Android, como notificaciones, permisos, uso compartido y asistentes.
    El componente Arquitectura es el centro de nuestra atención. A continuación, comenzará a aprender sobre los componentes. La imagen de abajo es cuando se lanzó Jetpack por primera vez. Ahora Jetpack tiene más componentes que los de la imagen. Consulte todas las bibliotecas de Android Jetpack para obtener componentes detallados .

Jetpack

ventaja

  1. Siga las mejores prácticas. Los
    componentes de Android Jetpack están construidos con los últimos métodos de diseño, son compatibles con versiones anteriores y pueden reducir los bloqueos y las pérdidas de memoria.
  2. Elimine el código repetitivo
    Android Jetpack puede administrar todo tipo de Activitytareas engorrosas (como tareas en segundo plano, navegación y administración del ciclo de vida) para que pueda concentrarse en crear excelentes aplicaciones.
  3. Reduzca las inconsistencias.
    Estas bibliotecas funcionan de manera uniforme en todas las versiones y dispositivos de Android, lo que lo ayuda a reducir la complejidad.

Descripción general de AndroidX

Los artefactos en el espacio de nombres de AndroidX incluyen la biblioteca de Android Jetpack. Al igual que la biblioteca de soporte, las bibliotecas en el espacio de nombres de AndroidX se proporcionan por separado de la plataforma Android y son compatibles con varias versiones de Android.
Si desea migrar el proyecto a AndroidX, seleccione Refactorizar—> Migrar a AndroidX en la barra de menú de Android Studio. Una vez completado, abra el archivo gradle.properties, puede ver estas dos líneas de código:

# 表示是否使用AndroidX
android.useAndroidX=true
# 表示是否将第三方库迁移到AndroidX
android.enableJetifier=true

Para la nueva versión de Android Studio, AndroidX ya es compatible de forma predeterminada y las operaciones anteriores no son necesarias.

Ciclo vital

A menudo necesitamos onCreate()inicializar los componentes en el medio de la página onPause(), detener los componentes en el onDestory()medio y reciclar los componentes en el medio. Tal trabajo es engorroso y el código es difícil de mantener, y también puede causar pérdidas de memoria.
Para ello, Google ofrece LifeCycle como solución. LifeCycle puede ayudar a los desarrolladores a reanudar los componentes que tienen en cuenta el ciclo de vida. Al utilizar componentes que tienen en cuenta el ciclo de vida, puede mover el código que depende del componente del método del ciclo de vida al componente en sí, lo que reduce el acoplamiento entre los módulos y la posibilidad de fugas de memoria. Escribe código más optimizado y fácil de mantener.

Principio del ciclo de vida

El ciclo de vida es una clase para almacenar componentes relacionados (por ejemplo, Activityo el Fragmentestado del ciclo de vida de la información) y para permitir que otros objetos observen este estado.
El ciclo de vida utiliza dos enumeraciones principales para realizar un seguimiento del estado del ciclo de vida de sus componentes asociados:

  • Evento (Evento)
    del marco y Lifecycleeventos del ciclo de vida de la clase despachada. Estos eventos se asignan a las Activityy Fragmentlos eventos de devolución de llamada.
 public enum Event {
    
    

        ON_CREATE,
      
        ON_START,
       
        ON_RESUME,
       
        ON_PAUSE,
       
        ON_STOP,
       
        ON_DESTROY,
        
        ON_ANY
 }
  • Estado (estado)
    El estado actual del componente rastreado por el objeto de ciclo de vida.
public enum State {
    
    
      
        DESTROYED,

        INITIALIZED,
        
        CREATED,

        STARTED,

        RESUMED;
//比较此状态是否大于或等于给定状态
public boolean isAtLeast(@NonNull State state) {
    
    
            return compareTo(state) >= 0;
}

Todos estos se pueden ver en el código fuente de la clase Lifecycle, como se muestra en la siguiente figura.
Ciclo vital
Jetpack nos proporciona dos clases: LifeCycleOwner(observado) y LifeCycleObserver(observador). Supervise el ciclo de vida de la página a través del modo de observador.
Podemos ComponentActivityver en el código fuente que implementa la LifecycleOwnerinterfaz y solo hay una interfaz getLifeCycle()LifeCycle implementa el modo observador a través de este método El código fuente ya tiene implementada la parte que realiza el observador.

 public class ComponentActivity extends androidx.core.app.ComponentActivity implements
        LifecycleOwner,
        ViewModelStoreOwner,
        SavedStateRegistryOwner,
        OnBackPressedDispatcherOwner {
    
    
        
  private final LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
  
  @NonNull
  @Override
  public Lifecycle getLifecycle() {
    
    
        return mLifecycleRegistry;
  }

Escuchamos Atctivitycuando el ciclo de vida, solo para darnos cuenta de que parte del visor de código que permite que los componentes personalizados logren LifecycleObserverla interfaz puede ser.

public class MyObserver implements LifecycleObserver {
    
    
	//当Activity执行onResume()时,该自动调用
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connectListener() {
    
    
        ...
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disconnectListener() {
    
    
        ...
    }
}

En Activity, solo necesita usar el siguiente código para vincular el observador y lo observado, y ya no debe preocuparse Activitypor el impacto de los cambios en el ciclo de vida del componente.

getLifecycle().addObserver(new MyObserver());

LifecycleService

Además de Android Activityy Fragmenttiene un ciclo de vida, hay un componente importante Servicepara la conveniencia del Serviceciclo de vida de escucha, Android proporciona una LifecycleServiceclase que hereda Servicee implementa la LifecycleOwnerinterfaz. Y Activityy Fragmentsimilares, también hay una getLifecycle()para nosotros llamamos, como parte del código fuente.

public class LifecycleService extends Service implements LifecycleOwner {
    
    
    private final ServiceLifecycleDispatcher mDispatcher = new ServiceLifecycleDispatcher(this);
    
    @Override
    @NonNull
    public Lifecycle getLifecycle() {
    
    
        return mDispatcher.getLifecycle();
    }
}

Al usar LifecycleService, necesitamos agregar las siguientes dependencias:

implementation "androidx.lifecycle:lifecycle-service:2.3.0"

El uso Activityes similar al del Servicemedio, vincular al observador en el Observermedio y darse cuenta de la vinculación del evento en la personalización . Úselo LifecycleServicebien para darse cuenta del Servicedesacoplamiento entre componentes y administrar los cambios provocados por el ciclo de vida internamente.

ProcessLifecycleOwner

Además de los componentes con un ciclo de vida Activity, Fragmenty los Servicehay Application. Muchas veces queremos saber si la aplicación está en primer plano o en segundo plano, o cuando el fondo vuelve al primer plano para recibir notificaciones. Para ello, LifeCycle proporciona una ProcessLifecycleOwnerclase que nos facilita conocer el ciclo de vida de toda la aplicación.
Al usar ProcessLifecycleOwner, necesitamos agregar las siguientes dependencias:

implementation "androidx.lifecycle:lifecycle-process:2.3.0"

ProcessLifecycleOwnerEl método de uso es similar al de Activity, Fragmenty Servicesu esencia es el modo de observador, en el Applicationque el observador Observerestá vinculado y el evento está vinculado a la costumbre .
Con esto ProcessLifecycleOwner, podemos obtener fácilmente los cambios en el ciclo de vida de la aplicación, realizar algunas operaciones comerciales en ella y reducir el acoplamiento del código del proyecto. Pero cabe señalar que:

  1. ProcessLifecyoleownerEs para el seguimiento de toda la aplicación y Activityno tiene nada que ver con la cantidad.
  2. Lifecycle.Event.ON CREATESolo se llamará una vez y Lifecycle.Event.ON_DESTROYnunca se llamará.
  3. Cuando la aplicación vuelva al primer plano desde el fondo, o cuando la aplicación se abra por primera vez, a su vez llamará Lifecycle.Event.ON_STARTy Lifecycle.Event.ON_RESUME.
  4. Cuando la aplicación se retira de la recepción (o el usuario presiona la tecla del menú de tareas de la tecla Inicio), a su vez llamará Lifecycle.Event.ON PAUSEy Lifecycle.Event.ON_ STOP.

Evento ON_STOP

Si Lifecyclepertenece a AppCompatActivityo Fragment, entonces llame AppCompatActivityo Fragmentla onSaveInstanceState()hora, Lifecycleel estado cambia CREATEDy envía ON_STOPeventos. FragmentActivityPuedes verlo en el código fuente.

 markFragmentsCreated();
 mFragmentLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);

 private void markFragmentsCreated() {
    
    
        boolean reiterate;
        do {
    
    
            reiterate = markState(getSupportFragmentManager(), Lifecycle.State.CREATED);
        } while (reiterate);
    }

 private static boolean markState(FragmentManager manager, Lifecycle.State state) {
    
    
        boolean hadNotMarked = false;
        Collection<Fragment> fragments = manager.getFragments();
        for (Fragment fragment : fragments) {
    
    
            if (fragment == null) {
    
    
                continue;
            }
            if (fragment.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
    
    
                fragment.mLifecycleRegistry.setCurrentState(state);
                hadNotMarked = true;
            }

            if (fragment.getHost() != null) {
    
    
                FragmentManager childFragmentManager = fragment.getChildFragmentManager();
                hadNotMarked |= markState(childFragmentManager, state);
            }
        }
        return hadNotMarked;
  }

Después de onSaveInstanceState()guardar AppCompatActivityel estado de Fragment o , su interfaz se considera inmutable hasta que se llama ON_START. Si intenta modificar la interfaz después de guardar el estado, es probable que se produzca una aplicación inconsistente del estado de navegación, por lo que la aplicación se está ejecutando en el estado de conservación FragmentTransaction, FragmentManagerse lanza la excepción.
AppCompatActivityEl onStop()testamento onSaveInstanceState()después de la llamada, que dejaría un hueco, que no permite que el estado de la interfaz cambie, pero Lifecycleaún no se ha movido al CREATEDestado.
Para evitar este problema, beta2 y anteriores en la Lifecycleclase se marcarán ya que el estado CREATEDno envía eventos, de modo que, incluso si no envía un evento (hasta la llamada al sistema onStop()), verifique el estado actual del código y obtendrá el valor real. .

ejemplo

  1. Cambiar entre actualizaciones de ubicación.
  2. Iniciar y detener el almacenamiento en búfer de video.
  3. Inicie y detenga la conexión de red.
  4. Pausa y reanuda los recursos dibujables de la animación.

Supongo que te gusta

Origin blog.csdn.net/yang_study_first/article/details/115225751
Recomendado
Clasificación