Architecture Components Android

Los ciclos de vida y Observables sobre ciclos de vida: pretender se la mejor manera de manejar los distintos estados de una activity o de un fragmento en su relación con el arranque y parada de listeners de servicios, como por ejemplo el de geolocalización.

LiveData pretende ser la manera de interconectar con el modelo. Nos permitirá observar los datos (observable) y ser consciente del ciclo de vida. Además nos permitirá subscribirnos automáticamente a los datos.

ViewModel es la manera en que las activities y fragmentos pueden enganchar con los datos. De hecho contendrán objetos del tipo LiveData. Y será utilizados por los controladores. De esta manera independizamos los datos del ciclo de vida y de la vista. La vista se enganchará con estos datos más adelante, mediante data binding o como sea.

Persistencia de datos. Room es una biblioteca de ORM para Sqlite.

 

En el DAO meteríamos todas las consultas identificadas por anotaciones: @Query, @Insert, @Delete, @Update. En la @Query es donde definiríamos la consulta de acceso a la tabla, los campos, etc…

 

En la Entidad es donde definiremos el @Entity con loas campos la clave primaria y demás.

En la definición de la Room es donde uniremos las entidades y los interfaces Dao.

Después de esta definición ya podríamos disponer de un objeto Room que sería el que maneje la BBDD.

 

Para unir los Room y los LiveData<T> lo haremos de una manera parecida:

De esta manera asociamos el listado de elementos relacionados con los registros de la tabla con el ViewModel.

Si en vez LiveData, quiere utilizarse la biblioteca RXJava2, también está soportado.

Todos estos componentes puedes testados correctamente con lso Mock que nos ofrece Espresso.

Enlace al a guía principal de arquitectura Android:

https://developer.android.com/topic/libraries/architecture/index.html

Ejemplos de uso:

https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample

Nuevas características de Android Studio 3.0 canary 1

Soporte de Kotlin:

  • Convertir código de Java a Kotlin, todavía no es del todo eficiente, está más bien pensado como un soporte de conversión para luego trabajar con ello.
  • Se puede visualizar el ByteCode reflejado del código de Kotlin, incluso decompilar el código y ver la versión Java
  • Las comprobaciones de Lint ya hechas podran utilizarse 100% con Kotlin

Layout Editor
* Se hace especial incapié en los ConstraintLayout
* Se pueden asociar vistas mediante cadenas (chains), una vez asociados podemos visualmente alinearlos o cambiar la relació de distancia entre ellos por ejemplo.
* Se pueden definir barreras, límites que permiten dividir un layout para que cuando se mueva una vista no se coloque encima de otras views que están al otro lado de la barrera.
* Soporte de datos de ejemplo en las vistas: por ejemplo en un RecycleView al editar un elemento pueden colocarse en el texto de un TextView “@tools:sample/lorem”, y otros samples, para que rellene la vista y así poder diseñar viendo cómo puede llegar a quedar el listado. Incluso pueden asociarse json de ejemplo con datos en plano “@sample/activity_log.json”.
* Al seleccionar un TextView podemos seleccionar la fuente en el editor de propiedades, pero ahora sale una nueva opción “More Fonts”, sale un diálogo donde salen todas las fuentes disponibles inlcuidas las fuentes descargables. Al selecionarla, la importa en nuestro proyetco automáticamente y renderiza el TextView con la fuente seleccionada.
* También se ha modificado el asistente de nuevo icono para que se pueda hacer uso de los adaptive icons.
* Mejoras de los errores mostrados

Profiler:
* Cuando estamos debugueando podemos hacer uso de los profilers. Una funcionalidad similar a Intruments en iOS, que nos permite analizar el comportamiento de la app, tanto a nivel de red, memoria, cpu, toques y activities. Por ejemplo al ver el profile de red, podemos ampliar un apartado en concreto del timeline y ver las peticiones que se han realizardo en ese margen de tiempo, sus resultados, así como las llamadas que se han realizado a nivel de código. En la parte de red de ha incluido soporte de Volley y de OkHTTP.
* Respecto al perfil de CPU, pueden realizarse grabaciones para obtener más datos mientras se está usando la app. Incluidos, hilos de ejecución, funciones más usadas, o aquellas que consumen más tiempo.
* En el perfil de memoria podemos ver cómo funciona la memoria, así como el recolector de basura. También podemos recolectar datos para saber cómo están funcionando las reservas de memoria dentro del heap. Esto nos permitirá revisar si hay algún tipo de pérdida de memoria por el camino. (memory leak)

Otras Mejoras:
* Se ha añadido, ya era hora, un explorador de ficheros del emulador (dispositivo) desde el Android Studio. Ahora podemos navegar por las carpetas visualmente. Nos permite tanto visualizar ficheros, como subir o bajar ficheros del dispositivo.
* Se han añadido unas nuevas funcionalidades de refactorización para que nos funcionen mejor las instant apps, para ayudarnos a modularizarlas.
* Se ha introducido un nuevo analizador de APK. Nos permite abrir cualquier apk y ver tod osu contenido, incluyendo cuando haya sino minimizado, al incluir el fichero de definiciones ya puede verse tal y cómo se llaman los recursos realmente. Ésto nos va a permitir también saber cómo minimizar el contenido del APK para facilitar su descarga e instalación.
* Se dispondrá de una herramienta de conversión de PNG a WebP para ayudar a minimizar las imágenes del APK.
* Incluso podemos debuguear un APK.

Compilación:

  • Se ha incluido un nuevo repositorio Maven http://maven.google.com/
  • En el repositorio están: Plugin de gradle, Bibliotecas de soporte, DataBinding, ConstraintLayout, Espresso, Bibliotecas de Pruebas, Biblioteca de Instant Apps y Architecture Components.
  • Se han dividido las tareas en una serie de subtareas incrementales. Tales como: Empaquetado de APK, Dexing, Compilación Java, Procesado de recursos, Compresión y procesador de anotaciones. Casi todo está planificado o realizado ya para 3.0 excepto por el procesador de anotaciones que no tiene todavía fecha de entrega.
  • Se ha creado una caché de compilaciones que permitirá realizar sólo los incrementales que no estén en la cache o no sean válidos. Tiene dos modos, uno local y otro distribuido con el resto de desarrolladores del proyecto.
  • Se han reducido de manera radical los tiempo de compilación para la versión 3.0. Para conseguirlo se han paralelizado algunas tareas de la compilación por bloques.
  • Soporte de Java 8. Del compilador javac, luego se pasan a clases java 7, se transforman y luego se pasa dex.
  • Gestión de dependencias: nos va apermitir generar más rapidamente los distintos sabores (flavors) de la compilación.
  • Se incorpora el concepto de Funcionalidad (feature), que es que nos va a permitir que las instant apps puedan compilarse más rápido al distinguir el código de la aplicación, las bibliotecas y las funcionalidades de la app.

Pruebas:
* Se ha añadido la Google play store al emulador, esto permitirá utilizar de una manera más cómoda los google play service. Habrá alguna imágenes que la tengan y otras que no, para probar si funcionan bien el tema de permisos.
* Se ha incluido también soporte de OpenGL 3.0
* Se ha incluido la posibilidad de meter configuraciones de proxy para cuando se trabaja dentro de una empresa que lo tenga puesto
* Se ha incluido una manera de rellenar una especie de informe de fallo que incluye descripción y captura de pantalla.
* Se ha mejorado el inspector de layouts

¿Qué hay de nuevo en Android O? #IO17

Mejoras de Interfaz:
* Soporte para múltiples plantallas, por lo que se pueden presentar distintas activities en distintas pantallas
* Mejoras de uso de color para que se vean iguales en los disintos dispositivos, incluidos los dispositivos con amplio rango de colores (wide-gamut)
* Se añade el soporte para PNG de 16 bit y perfiles ICC para Jpeg, PNg y Webp
* Modo Picture-in-Picture para seguir haciendo cosas mientras que estamos viendo algo, ya no es necesario decir que las pantallas pueden cambiar de tamaño en el manifiesto
* Mejoras en manejo de medios: ahora se pueden saber los metadatos de los medios que se van a reproducir o grabar (metrics), en la preproducción tendremos un mejor control del buffer y podemos buscar dentro del medio (seek) de una manera más controlada con soporte de marcas de agua (watermark), se soporta el DRM.
* Respecto a la grabación ahora y apodemos añadir pistas de audio o de video programáticamente, y se añade el soporte de Mpeg2 TS para streaming
* Se ha mejorado la WebView para poder gestionarla de una manera más segura (EnableSafeBrowsing), se define en el manifiesto con un meta dato, se ha mejorado el manejo de memoria y cuelgues
* Ahora dentro de los AnimatorSet se permite realizar un posicionameinto en el tiempo (seek) y reproducirlo al revés.
* Autorellenado (AutoFill) de formularios: ahora las vistas típicas de formulario (TextView) sepueden aprovechar automáticamente de esta funcionalidad ya que tiran de un servicio propio (aunque se puede escribir el nuestro si quieremos) de Android O. Debería facilitar introducir los datos en los formularios.
* Nuevo directorio de recursos para fuentes /res/font accesible desde R.font , soportadas también familias de fuentes que pueden ser usadas en los layouts. También podremos descargarlas en caliente con los Google Play services 11.
* Los TextView ahora podrá crecer automáticamente (AutoSize TextView) reflejando eso en la fuente que se utilice a nivel de tamaño. Si el Textview se hace más grande el texto también se hace más grande. Estará también disponible en la biblioteca de soporte.
* Mejoras en el API de Accesbilidad: gestos del sensor de huellas, etc…
* Se suprime la necesidad de hacer el casting en el findViewByID() !!!!
* Iconos adaptativos: tiene 3 partes, fondo, icono y máscara
* Cambios en el uso de shortcuts y widgets: pin request es una nueva manera de aplicar estos recursos de una manera más fácil en Android O
* Se introducen los canales de notificaciones, para agrupar aquellas notificaciones dentro de una misma aplicación para que el usuario pueda seleccionar cuales son los tipos de notificaciones que quiere ver de cada aplicación o entrar a un canal concreto de notificaciones. Uan vez que compiles para API lvl 26 el uso de los canales es obligatorio.
* Animaciones físicas: hay de distintos tipos aplicables a las views

Nuevos API’s:
* Modo estricto: manejo de hilos y política dentro de la VM
* Se incluye la posibilidad de crear nuevos descrptores de documentos para poder por ejemplo buscar dentro de ellos, por ejemplo ficheros de video
* Ahora se podrá consultar y manejar de una manera más sencilla, los datos alojados en la cache a través del
StorageManager

Seguridad:
* El ANDROID_ID ahora será distinto por cada usuario y aplicación, por lo que ya no debería utilizarse
* Google Play Protect, una especie de protector que escanea las apps en búsqueda de software malicioso
* Mejoras varias: encriptación, arranque seguro, seguridad en instant apps, autenticación, acceso a kernel y medios.
Lenguaje:
* Kotlin Nuevo lenguaje de programación soportado oficialmente por Android Studio a partir de la versión 3
* El lenguaje ya está siendo utlizado en producción por aplicaciones como Flipboard o Pinterest
* Se han introducido nuevos paquetes Java: java.time, java.nio.file, java.lang.invoke
* Mejoras de la ejecución (concurrent-copying collector), compactación del heap en segundo plano, optimizaciones de memoria y del lanzamiento de activities (DEX locality)

Biblioteca de soporte v26:
* Fuentes
* Fuentes descargables
* TextView AutoSize
* EmojiCompat: incluso actualizables o incluidos en el bundle

Componentes de Arquitectura:
* Trata de facilitar el desarrollo en Android
* Mejorar el ciclo de vida de las activities
* Aclarar el acceso a la persistencia de datos y datos offline
* Cambios en el sistema de localización, cache, límites en procesos de segundo plano
* Cambios en las ventanas de alerta, ahora deberán usarse TYPE_APPLICATION_OVERLAY

Suscríbete al Boletín

Si quieres estar al tanto de las novedades del blog, ya sabes :)
* = campo obligatorio

powered by MailChimp!

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies