Consecuencias de Google I / O 2017 desarrollo de componentes basados ​​en el ciclo de vida

Como de costumbre, el Google I / O de este año vio muchos anuncios relacionados con Android.

En esta serie de consejos rápidos, veremos más de cerca algunas de las actualizaciones de software y las nuevas versiones que puede obtener. hoy

En esta primera publicación, veremos una colección de bibliotecas cuyo objetivo es eliminar la molestia de la administración del ciclo de vida, ofreciéndole una forma de crear componentes conscientes del ciclo de vida que puedan rastrear y reaccionar ante eventos del ciclo de vida automáticamente. También proporcionaré una breve introducción a otros dos componentes que han sido diseñados para usarse con estos nuevos componentes que tienen en cuenta el ciclo de vida: LiveData y Room.

LifecycleOwner y LifecycleObserver

Respetando el ciclo de vida de tu Actividads y Fragmentos es crucial para crear una aplicación exitosa. Si estos fundamentos están equivocados, terminará con pérdidas de memoria que hacen que su aplicación se retrase e incluso se bloquee..

Otro problema recurrente que puede encontrar con la administración del ciclo de vida es intentar actualizar la IU de su aplicación cuando la actividad o el fragmento no están en un estado válido. Por ejemplo, si un Actividad recibe una devolución de llamada después de que se haya detenido, entonces es muy probable que su aplicación se bloquee. 

Para ayudarlo a evitar todos los dolores de cabeza que conlleva la administración del ciclo de vida, Google ha anunciado un nuevo conjunto de componentes conscientes del ciclo de vida que pueden rastrear el ciclo de vida de una actividad o fragmento, y ajustar su comportamiento en consecuencia..

Puede acceder a estos componentes de la arquitectura de Android a través del repositorio Maven de Google hoy. Sin embargo, todavía están en alfa, por lo que debe esperar algunos cambios importantes antes de la versión 1.0. 

En particular, la Fragmento y AppCompatActivity Las clases actualmente no pueden implementar el nuevo LifecyclePropietario interfaz. Tendrá que utilizar el temporal Ciclo de vidaactividad y LifecycleFragment Clases hasta que los componentes de la arquitectura de Android alcancen su versión 1.0. Estas clases quedarán obsoletas tan pronto como los fragmentos de Android y las Actividades se hayan actualizado para admitir los componentes del ciclo de vida.

Para comenzar a experimentar con estos componentes, deberá agregar el repositorio de Google Maven a su nivel de proyecto construir.gradle expediente:

allprojects repositories jcenter () // Agregar el repositorio de Google Maven // maven url 'https://maven.google.com'

Luego, abre tu nivel de módulo construir.gradle archivo, y agregue lo siguiente:

dependencias compile fileTree (dir: 'libs', incluye: ['* .jar']) compile "android.arch.lifecycle: runtime: 1.0.0-alpha1" compile "android.arch.lifecycle: extensions: 1.0.0 -alpha1 "annotationProcessor" android.arch.lifecycle: compiler: 1.0.0-alpha1 "

Hay algunos componentes de la arquitectura de Android, pero en este artículo solo nos centraremos en los dos siguientes:

  • LifecyclePropietarioEsto es algo que tiene un ciclo de vida, como un Actividad o Fragmento.
  • LifecycleObserverEsta es una clase que puede monitorear el estado del ciclo de vida de un componente a través de métodos anotados. Estos métodos se llaman cada vez que el componente asociado ingresa en el estado del ciclo de vida correspondiente.

Al mover el código que monitorea y reacciona a los eventos del ciclo de vida en una LifecycleObserver, puede evitar su actividad o los métodos relacionados con el ciclo de vida del fragmento (como onStart y onStop) se ha disparado fuera de control, lo que hace que su código sea mucho más legible.

En el siguiente ejemplo, estamos implementando LifecycleObserver, y luego usando el @OnLifeCycleEvent para reaccionar a varios eventos del ciclo de vida:

importar android.arch.lifecycle.Lifecycle; importar android.arch.lifecycle.LifecycleObserver; importar android.arch.lifecycle.OnLifecycleEvent; La clase pública SecondActivity implementa LifecycleObserver … lifecycle.addObserver (this);  @OnLifecycleEvent (Lifecycle.Event.ON_START) void start () // Cuando la Actividad entra en un estado ON_START, haga algo // @OnLifecycleEvent (Lifecycle.Event.ON_STOP) void stop () // Cuando la Actividad ingrese un estado ON_STOP, haga algo // // Cuando se destruya la Actividad, anule el registro de LifecycleObserver // @OnLifecycleEvent (Lifecycle.Event.ON_DESTORY) void cleanup () lifecycle.removeObserver (this); 

Luego, en el Actividad quieres monitorear, extender Ciclo de vidaactividad para acceder a la LifecycleObserver información:

La clase pública MainActivity extiende LifecycleActivity 

Muchas operaciones solo pueden realizarse cuando un fragmento o actividad se encuentra en un estado específico. Puedes usar lifecycle.getState para verificar rápida y fácilmente el estado actual del componente, y luego solo realizar la acción si el componente está en el estado correcto:

if (lifecycle.getState (). isAtLeast (STARTED)) 

Datos en tiempo real

Datos en tiempo real es un soporte de datos observable que expone una secuencia de eventos que puede observar.

La diferencia clave entre Datos en tiempo real y otros observables, como RxJava, es que Datos en tiempo real es consciente del ciclo de vida de Android. Datos en tiempo real respeta el estado del ciclo de vida de sus Actividades, fragmentos y servicios, y administrará las suscripciones por usted.

Crucialmente, si el ciclo de vida de un observador está inactivo, no se notificará al observador sobre los cambios en el Datos en tiempo real, evitando bloqueos de aplicaciones que pueden ocurrir cuando intenta enviar actualizaciones a componentes detenidos.

Usar Datos en tiempo real, solo necesitas decirle a tu Actividad que desea observar algunos datos dentro del ciclo de vida:

clase pública MyActivity extiende LifecycleActivity public void onCreate (Bundle savedState) LiveData datos del usuario; // Obtener datos de usuario de algún lugar // userData.observe (this, usuario -> ); 

Tan pronto como la actividad comience, comenzará a observar la Datos en tiempo real, y su observador recibirá una actualización cada vez que el valor de ese Datos en tiempo real cambios Si el Actividad se destruye, entonces la suscripción se eliminará automáticamente.

Si una Actividad se detiene debido a un cambio de configuración, entonces la nueva instancia de ese Actividad recibirá el último valor disponible de la Datos en tiempo real.

Datos en tiempo real comparte algunas similitudes con RxJava, pero la palabra oficial de Google I / O es que si está familiarizado con RxJava, entonces debería comenzar sus proyectos de Android con Datos en tiempo real, ya que está diseñado para ser simple, rápido y ligero, y se integra bien con el marco de Android. Luego puede agregar funciones de RxJava si necesita funcionalidad de programación reactiva adicional.

Si quieres usar Datos en tiempo real con la biblioteca RxJava 2, luego abra su nivel de módulo construir.gradle archivo y añadir lo siguiente:

compilar "android.arch.lifecycle: reactivestreams: 1.0.0-alpha1" 

Entonces podrás utilizar los siguientes métodos: 

  • aPublicadorAdapta el Datos en tiempo real transmitir a un ReactiveStreams Editor

estática pública  Editor toPublisher (final LifecycleOwner lifcle, final LiveData datos en tiempo real)  
  • dePublicadorCrea un observable Datos en tiempo real transmisión desde un editor de ReactiveStreams. 

estática pública  Datos en tiempo real dePublisher (editor final editor)

La biblioteca de la sala

Aunque el marco de Android tiene soporte incorporado para trabajar con contenido de SQL sin procesar, estas API son bastante bajas y requieren mucho tiempo para implementarlas..

La nueva biblioteca de salas de Google promete abstraer algunos de los detalles de implementación subyacentes de trabajar con tablas y consultas de SQL en bruto. También debería ayudar a reducir la cantidad de código repetitivo que necesita escribir para convertir las consultas SQL en objetos de datos Java, y presenta una Migración Clase que puede utilizar para actualizar su aplicación sin perder los datos del usuario.. 

Para usar Room, abre tu nivel de módulo construir.gradle archivo y añadir lo siguiente a la dependencias sección:

compilar "android.arch.persistence.room:runtime:1.0.0-alpha1" annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1" 

Al realizar consultas, normalmente deseará que su interfaz de usuario se actualice automáticamente cada vez que cambien los datos; Con Room, puede lograr esto utilizando un tipo de valor de retorno de Datos en tiempo real.

Finalmente, si está utilizando RxJava, entonces sus consultas de sala también pueden devolver RxJava 2 Editor y Fluido objetos. Para usar RxJava con Room, deberá abrir el nivel de módulo construir.gradle archivo y añadir lo siguiente a la dependencias sección:

compilar 'android.arch.persistence.room:rxjava2:1.0.0-alpha1' 

Conclusión

En esta sugerencia rápida, le mostré cómo administrar el ciclo de vida de Android, usando LifecycleOwner y LifecycleObserver, y le presenté dos componentes adicionales que tal vez quiera usar junto con el proyecto Lifecycle.. 

En la siguiente sugerencia, veremos los planes de Google para fusionar los componentes de la IU de Android Wear con la Biblioteca de soporte de Android, así como algunas adiciones a las complicaciones de Android Wear.. 

Mientras tanto, consulte algunos de nuestros otros tutoriales y nuestros cursos de video sobre el desarrollo de aplicaciones para Android!