Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

Notas de la versión de los componentes de la arquitectura

En esta página, se brinda información sobre las versiones de los componentes de la arquitectura, incluidos los problemas conocidos, las limitaciones y las recomendaciones generales. Revisa las notas antes de usar los componentes de la arquitectura.

Tus comentarios son esenciales. Informa los problemas con el Seguimiento de problemas para que podamos integrar tus comentarios en la versión final.

6 de diciembre de 2018

Paging

Lanzamiento de Paging 2.1.0-rc01 sin modificaciones desde 2.1.0-beta01.

Lanzamiento de Navigation 1.0.0-alpha08. Esta versión tiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.

Nuevas funciones

  • A partir de ahora, las etiquetas Destination que se usen con métodos NavigationUI, reemplazarán automáticamente las instancias de {argName} en tu android:label con el argumento correcto b/80267266
  • Ahora Navigation depende de la Biblioteca de compatibilidad 28.0.0 b/120293333

Cambios rotundos

  • El nombre de OnNavigatedListener cambió por OnDestinationChangedListener b/118670572
  • Ahora OnDestinationChangedListener también transfiere el Bundle de argumentos aosp/837142
  • Se quitaron los atributos app:clearTask y app:launchDocument y sus métodos asociados. Usa app:popUpTo con la raíz de tu gráfico para quitar todos los destinos de tu pila de actividades. b/119628354
  • Ahora ActivityNavigator.Extras usa un patrón Builder y agrega la posibilidad de configurar cualquier marca de Intent.FLAG_ACTIVITY_ aosp/828140
  • El nombre de NavController.onHandleDeepLink cambió por handleDeepLink aosp/836063
  • Muchas clases y métodos, no destinados para subclases, como NavOptions, NavInflater, NavDeepLinkBuilder y AppBarConfiguration quedaron como final aosp/835681
  • Se quitó el método obsoleto NavHostFragment.setGraph(). aosp/835684
  • Se quitó el método obsoleto NavigationUI.navigateUp(DrawerLayout, NavController). aosp/835684
  • La creación de fragmentos se trasladó a FragmentNavigator, y ahora es más fácil delegar la creación de fragmentos a FragmentFactory. b/119054429
  • El constructor de NavGraphNavigator ya no usa un Context aosp/835340
  • Ahora NavigatorProvider es una clase en lugar de una interfaz. No cambió la funcionalidad del NavigatorProvider que muestra getNavigatorProvider(). aosp/830660
  • Se quitó NavDestination.navigate(). Se llamará a navigate() en el Navigator en su lugar. aosp/830663
  • Reestructuración importante de Navigator, se quitó la necesidad de contar con OnNavigatorNavigatedListener y, en su lugar, navigate muestra el NavDestination al que se navegó.
  • Las instancias de Navigator ya no pueden enviar eventos emergentes al NavController. Considera usar una OnBackPressedCallback para interceptar las instancias en las que se presione el botón atrás y llamar a navController.popBackStack(). aosp/833716

Correcciones de errores

  • Ahora popUpTo funciona con regularidad cuando el destino es un elemento <navigation>. b/116831650
  • Se corrigieron errores que daban como resultado una IllegalArgumentException al usar gráficos anidados. b/118713731 b/113611083 b/113346925 b/113305559
  • Ahora el atributo dataPattern de los destinos <activity> completará los argumentos de argumentos que no son de cadena al llamar a toString() b/120161365

Safe Args

  • Safe Args admite los objetos que se pueden serializar, incluidos los valores de enumeración. Los tipos de enumeración pueden establecer un valor predeterminado mediante el literal de enumeración sin el nombre de clase (p. ej. app:defaultValue="READ") b/111316353
  • Safe Args admite matrices de todos los tipos compatibles b/111487504
  • Ahora Safe Args ignora las subcarpetas de los directorios de recursos b/117893516
  • Safe Args agrega anotaciones @Override cuando corresponda b/117145301

5 de diciembre de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha12. Esta versión tiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación. Es probable que esta versión se lance como nuestra primera versión Beta. alpha12 también incluye actualizaciones de documentación extensas.

Cambios en la API

  • Un nuevo artefacto, work-rxjava2, introduce RxWorker. Este es un ListenableWorker que espera una Single<Payload>.
  • Se quitó la compatibilidad con Firebase JobDispatcher debido a que dejará de estar disponible de manera inminente. Esto quiere decir que el artefacto work-firebase ya no se actualizará en preparación para la versión Beta. En el futuro, agregaremos una alternativa.
  • Payload se integró a Result. Ahora Result es una "clase sellada" con tres implementaciones concretas, que puedes obtener mediante Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) y Result.retry(). Ahora el resultado de ListenableFuture es Result en lugar de Payload. Worker no tienen métodos de captador y establecedor para el resultado Data. Este es un cambio rotundo.
  • Se agregaron Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) y Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit), además de variantes para mejorar la compatibilidad con los URI de activación lenta de contenido. b/119919774
  • Se agregó la variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Este método requiere API 26.
  • Se agregaron los métodos de extensión de Kotlin Operation.await() y ListenableFuture.await().
  • El nombre de Operation.getException() cambió por Operation.getThrowable(). Este es un cambio rotundo.
  • La clase ContentUriTriggers y los métodos que hacen referencia a ella ya no están disponibles para uso público. Este es un cambio rotundo.
  • Se quitaron el resto de los métodos de varargs en WorkManager, WorkContinuation y OneTimeWorkRequest para optimizar la API. Para solucionar los problemas de compilación, puedes envolver tus varargs existentes con Arrays.asList(...). Todavía incluimos versiones con un solo argumento de cada método. Este es un cambio rotundo.
  • Se quitaron las variantes de WorkContinuation.combine(OneTimeWorkRequest, *). Presentaban una API confusa, mientras que los métodos combine existentes son más comprensibles. Este es un cambio rotundo.

Correcciones de errores

  • Ahora las implementaciones previas a Marshmallow son más confiables al recuperarse del cierre de proceso de una tarea que ya está en ejecución.
  • Seguimiento mediante WorkManager de LiveData que se observan a través de observeForever. Este es un backport de una corrección de la biblioteca de Room. b/74477406
  • Ahora Data.Builder.build() muestra una excepción si el objeto serializado supera su tamaño máximo. Anteriormente, esto solo sucedería en un subproceso en segundo plano donde no se podía administrarlo correctamente.
  • Mayor distinción entre las tareas de detención y cancelación. getWorkInfoById() mostrará WorkInfo con el CANCELLED State durante ListenableWorker.onStopped().
  • Los Result null se tratarán como errores en ListenableWorker. b/120362353
  • Corrección provisional de tablets Shield que ejecutan API 24 y que a veces mostraban una IllegalArgumentException. b/119484416

Cambios rotundos en la API

  • Se quitó la compatibilidad con Firebase JobDispatcher debido a que dejará de estar disponible de manera inminente. Esto quiere decir que el artefacto work-firebase ya no se actualizará en preparación para la versión Beta. En el futuro, agregaremos una alternativa.
  • Payload se integró a Result. Ahora Result es una "clase sellada" con tres implementaciones concretas, que puedes obtener mediante Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) y Result.retry(). Ahora el resultado de ListenableFuture es Result en lugar de Payload. Worker no tienen métodos de captador y establecedor para el resultado Data.
  • Se agregaron los métodos de extensión de Kotlin Operation.await() y ListenableFuture.await().
  • El nombre de Operation.getException() cambió por Operation.getThrowable().
  • La clase ContentUriTriggers y los métodos que hacen referencia a ella ya no están disponibles para uso público.
  • Se quitaron el resto de los métodos de varargs en WorkManager, WorkContinuation y OneTimeWorkRequest para optimizar la API. Para solucionar los problemas de compilación, puedes envolver tus varargs existentes con Arrays.asList(...). Todavía incluimos versiones con un solo argumento de cada método.
  • Se quitaron las variantes de WorkContinuation.combine(OneTimeWorkRequest, *). Presentaban una API confusa, mientras que los métodos combine existentes son más comprensibles.

4 de diciembre de 2018

Room

Lanzamiento de Room 2.1.0-alpha03 con compatibilidad para corrutinas y varias correcciones de errores.

Cambios en la API

  • Ahora el FTS tokenizer en @Fts3/@Fts4 lleva una cadena en lugar de una enumeración. Esto permite que Room use tokenizadores personalizados. Los tokenizadores integrados todavía están definidos en FtsOptions como constantes de la cadena. b/119234881

Nuevas funciones

  • Corrutinas: Ahora los métodos DAO pueden ser funciones de suspensión. Para admitir las funciones de suspensión en Room, se lanzó un nuevo artefacto, room-coroutines. b/69474692
  • Los métodos DAO con anotaciones @Insert, @Delete o @Update ahora admiten ListenableFuture como tipo de devolución. b/119418331

Correcciones de errores

  • Se solucionó un error en el que Room intentaba incorrectamente encontrar un constructor con columnas en la propiedad ignoredColumns de @Entity. b/119830714
  • Se solucionó un error en el que Room no identificaba parámetros del método DAO como finales en su implementación generada. b/118015483
  • Se solucionó un error en el que el procesador de Room fallaba al informar un error en una consulta con símbolos especiales. b/119520136
  • Se corrigió un error en el que Room rechazaba varias implementaciones de Collection como argumentos de una expresión IN. b/119884035
  • Se corrigió un error en el que los LiveData mostrados por Room recibían residuos recopilados cuando se los observaba de manera indefinida, lo que ocasionaba que ya no emitieran datos nuevos. b/74477406
  • Se actualizó el bloqueo de cierre de RoomDatabase a fin de reducir la competencia de bloqueo. b/117900450

8 de noviembre de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha11. Esta versión incluye cambios que conformarán una API estable en beta. Hay cambios rotundos en la API en esta versión. Consulta la sección Cambios rotundos en la API a continuación.

Cambios en la API

  • work-runtime-ktx introduce un nuevo CoroutineWorker.
  • El nombre de WorkStatus cambió por WorkInfo. Todas las variantes correspondientes del método getStatus cambiaron de nombre por las variantes getWorkInfo correspondientes. Este es un cambio rotundo.
  • ListenableWorker.onStopped() ya no acepta un argumento booleano que representa si WorkRequest se canceló. WorkManager ya no hace esta distinción. Este es un cambio rotundo.
  • El nombre del paquete androidx.work.test cambió a androidx.work.testing. Este es un cambio rotundo.
  • Los establecedores en Constraints ya no forman parte de la API pública. Este es un cambio rotundo.
  • Anteriormente, WorkerParameters.getTriggeredContentUris() y WorkerParameters.getTriggeredContentAuthorities() mostraban matrices. Ahora estos métodos muestran Collections. Este es un cambio rotundo.
  • El nombre de ListenableWorker.onStartWork() cambió por ListenableWorker.startWork(). Este es un cambio rotundo.
  • El constructor de WorkStatus ya no forma parte de la API pública. Este es un cambio rotundo.
  • Los nombres de Configuration.getMaxJobSchedulerID() y Configuration.getMinJobSchedulerID() cambiaron por Configuration.getMinJobSchedulerId() y Configuration.getMaxJobSchedulerId() respectivamente. Este es un cambio rotundo.
  • Se agregaron muchas anotaciones @NonNull a la API pública para mejorar su ergonomía.
  • Se agregó la API WorkManager.enqueueUniqueWork() para poner en cola OneTimeWorkRequest únicos sin tener que crear WorkContinuation.
  • Ahora todas las variantes de los métodos enqueue y cancel en WorkManager muestran un nuevo tipo de Operation. Este es un cambio rotundo.
  • Las variantes de enqueue ya no aceptan varargs para WorkRequest. Este es un cambio rotundo. Usa Collections en su lugar. Puedes usar Arrays.asList() para modificar el código existente. Realizamos este cambio para reducir la cantidad de métodos y la superficie de la API.
  • Ahora los intentos de initialize de WorkManager que se repitan más de una vez por proceso darán como resultado IllegalStateException. Este es un cambio rotundo.

Correcciones de errores

  • Ahora WorkRequest.Builders en el artefacto work-runtime-ktx usan ListenableWorker. Correcciones b/117666259
  • Puedes asegurarte de que el próximo tiempo de ejecución de PeriodicWork sea en el futuro. Correcciones b/118204399
  • Se quitaron las posibles operaciones de I/O del disco cuando usas WorkManager durante el inicio de la app. Correcciones b/117796731
  • Se corrigió una condición de carrera en WorkConstraintsTracker. Correcciones android-workmanager/issues/56

Cambios rotundos en la API

  • El nombre de WorkStatus cambió por WorkInfo. Todas las variantes correspondientes del método getStatus cambiaron de nombre por las variantes getWorkInfo correspondientes.
  • ListenableWorker.onStopped() ya no acepta un argumento booleano que representa si WorkRequest se canceló. WorkManager ya no hace esta distinción.
  • El nombre del paquete androidx.work.test cambió a androidx.work.testing.
  • Los establecedores en Constraints ya no forman parte de la API pública.
  • Anteriormente, WorkerParameters.getTriggeredContentUris() y WorkerParameters.getTriggeredContentAuthorities() mostraban matrices. Ahora estos métodos muestran Collections.
  • El nombre de ListenableWorker.onStartWork() cambió por ListenableWorker.startWork().
  • El constructor de WorkStatus ya no forma parte de la API pública.
  • Los nombres de Configuration.getMaxJobSchedulerID() y Configuration.getMinJobSchedulerID() cambiaron por Configuration.getMinJobSchedulerId() y Configuration.getMaxJobSchedulerId() respectivamente.
  • Ahora todas las variantes de los métodos enqueue y cancel en WorkManager muestran un nuevo tipo de Operation.
  • Las variantes de enqueue ya no aceptan varargs para WorkRequest.
  • Ahora los intentos de initialize de WorkManager que se repitan más de una vez por proceso darán como resultado IllegalStateException.

1 de noviembre de 2018

Paging

Lanzamiento de Paging 2.1.0-beta01 sin modificaciones desde 2.1.0-alpha01.

30 de octubre de 2018

Room

Room 2.1.0-alpha02 se lanzó con varias correcciones de errores y una nueva función.

Nuevas funciones

  • Se agregó compatibilidad para hacer referencia a @DatabaseView en @Relation. b/117680932

Correcciones de errores

  • Se corrigió un error en el que Room realizaba operaciones de I/O en el disco en el proceso principal al suscribirse y desechar un tipo de retorno Rx b/117201279
  • Se corrigió un error en el que Room no encontraba un convertidor de tipo apropiado para un campo en una clase de entidad de Kotlin. b/111404868
  • Se corrigió un error en el que Room generaba un código incorrecto para una implementación de interfaz DAO que incluye un método predeterminado de Kotlin sin argumentos. b/117527454
  • Se actualizó el analizador de gramática de SQLite de Room y se corrigió un error de rendimiento que prolongaba los tiempos de compilación. b/117401230

29 de octubre de 2018

Se lanzó Navigation 1.0.0-alpha07 con correcciones de errores y cambios en la API.

Nuevas funciones

Cambios rotundos

  • El módulo navigation-testing-ktx se integró al navigation-testing artifact y ya no se lo publicará.
  • Ahora el artefacto navigation-testing tiene una dependencia en la biblioteca estándar de Kotlin. Se modificó la API para que sea más coherente con las convenciones de Kotlin, aunque puedes seguir usándola para pruebas escritas en Java.
  • Los gráficos de navegación registrados en manifiestos de metadatos ya no son compatibles. b/118355937
  • Las acciones ya no pueden adjuntarse a los destinos <activity>. aosp/785539

Correcciones de errores

  • Ahora los vínculos directos analizan correctamente los parámetros de consultas. b/110057514
  • Ahora los destinos de actividades aplican correctamente todas las animaciones de entrada y salida. b/117145284
  • Se corrigieron los errores que ocurren después de los cambios de configuración cuando se usan Navigator personalizados. b/110763345

Safe Args

  • Ahora Safe args tienen una dependencia fija en Android Gradle Plugin 3.2.1. b/113167627
  • Ahora se pueden generar Directions para las clases internas. b/117407555
  • Se corrigió un problema con la generación de Directions en un gráfico <include>. b/116542123

12 de octubre de 2018

Paging

Lanzamiento de Paging 2.1.0-alpha01 con dos incorporaciones importantes: arrastre de páginas y bibliotecas de extensión de KTX para cada artefacto, además de muchas otras correcciones de errores y modificaciones en la API.

Cambios en la API

  • Se agregó PagedList.Config.Builder.setMaxSize() para limitar la cantidad de elementos cargados en la memoria.
  • Se agregó androidx.paging.Config() como una alternativa de Kotlin para PagedList.Config.Builder
  • Se agregó androidx.paging.PagedList() como una alternativa de Kotlin para PagedList.Builder
  • Se agregó DataSourceFactory.toLiveData() como una alternativa de Kotlin para LivePagedListBuilder
  • Se agregaron DataSourceFactory.toObservable() y toFlowable() como alternativas de Kotlin para RxPagedListBuilder
  • Se agregó AsyncPagedListDiffer.addPagedListListener() para escuchar cambios de PagedList. b/111698609
  • Se agregó la variante PagedListAdapter.onCurrentListChanged() que transfiere la lista anterior y la nueva. La variante dejó de estar disponible.
  • Se agregaron variantes PagedListAdapter/AsyncPagedListDiffer.submitList() que realizan una devolución de llamada adicional que se activa si/cuando se muestra pagedlist, después de diffing. Esto te permite sincronizar un intercambio de PagedList con otras actualizaciones de IU. b/73781068
  • Se agregó PagedList.getLoadedCount() para informarte cuántos elementos hay en la memoria. Ten en cuenta que el valor de retorno siempre es igual a .size() si los marcadores de posición están inhabilitados.

Correcciones de errores

  • Se corrigió una condición de carrera durante el diffing si se reutilizan las listas b/111591017
  • Ahora PagedList.loadAround() muestra IndexOutOfBoundsException cuando el índice no es válido. Anteriormente, fallaba sin proporcionar una excepción clara.
  • Se corrigió un error en el que un tamaño de carga inicial extremadamente pequeño junto con datos sin modificar provocaban que la carga no continuara b/113122599

11 de octubre de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha10 con compatibilidad para el trabajo asíncrono controlado por el desarrollador. Hay cambios rotundos en la API en esta versión. Consulta la sección Cambios rotundos en la API a continuación.

Adelantamos que WorkManager está ingresando a las fases finales de su período alfa. Esperamos que la versión Beta sea estable en cuanto a la API. Por ello, asegúrate de completar tus opiniones en nuestro documento de seguimiento de problemas.

Cambios en la API

  • Se quitaron todos los métodos y las clases anteriormente deprecated, en especial, el constructor Worker predeterminado. Esto es un cambio rotundo en materia de API.
  • El nombre de NonBlockingWorker cambió por ListenableWorker, que ahora es una clase pública visible y está lista para su uso.
    • ListenableWorker proporciona acceso a un método abstracto, ListenableFuture<Payload> onStartWork() al que se llama en el subproceso principal. Puedes iniciar y procesar las tareas de manera asíncrona de la forma que prefieras. Cuando termines, actualiza ListenableFuture según corresponda. Las implementaciones de referencia de ListenableFuture se proporcionan en el paquete Futures en alpha02 (consulta la sección WorkManager a continuación).
    • Worker extiende ListenableWorker y sigue funcionando como antes, como un método Result doWork() abstracto.
    • Algunos métodos y miembros cambiaron de Worker a ListenableWorker.
    • En poco tiempo proporcionaremos implementaciones de referencia para ListenableWorker que usan corrutinas de Kotlin (una vez que se hayan lanzado las versiones estables) y RxJava2.
  • La interfaz WorkerFactory y la implementación concreta DefaultWorkerFactory se fusionaron en una clase abstracta llamada WorkerFactory. La implementación garantiza que el comportamiento predeterminado basado en reflexiones se invocará como un último esfuerzo de implementación para cualquier instancia WorkerFactory creada por el usuario. Este es un cambio rotundo.
  • Se quitaron WorkManager.synchronous() y WorkContinuation.synchronous(), y todos los métodos relacionados. Se agregó ListenableFuture<Void> como tipo de retorno de muchos métodos en la API. Este es un cambio rotundo en materia de API.
    • Ahora puedes usar ListenableFuture para obtener y observar de manera síncrona. Por ejemplo, se usó WorkManager.enqueue() para mostrar void y ahora muestra ListenableFuture<Void>. Puedes llamar a ListenableFuture.addListener(Runnable, Executor) o ListenableFuture.get() para ejecutar código cuando se complete la operación.
    • Ten en cuenta que ListenableFuture no te indicará si la operación se realizó correctamente o falló, solo si se completó. Necesitarás métodos WorkManager para averiguar esta información.
    • Ignoramos las llamadas de cancel() a estos objetos, ya que son confusas y su razonamiento es complicado (¿estás cancelando la operación o el trabajo que resulta de ella?). Esto se encuentra dentro del contrato de Future.
    • Para mantener la paridad con los métodos getStatus* asíncronos, proporcionamos variantes ListenableFuture y cambiamos el nombre de los métodos existentes que mostraban LiveData para que "LiveData" forme parte del nombre de manera explícita (por ejemplo, getStatusesByIdLiveData(UUID)). Esto es un cambio rotundo en materia de API.

Correcciones de errores

  • Se corrigió el error conocido de alpha09 en relación con los archivos androidx-annotations.pro duplicados. Puedes quitar la solución alternativa de las notas de la versión anteriores. Para ello, borra exclude 'META-INF/proguard/androidx-annotations.pro' del archivo Gradle.
  • Se agregaron configuraciones de ProGuard para mantener el constructor Worker nuevo. b/116296569
  • Se corrigió una posible NullPointerException en una condición de carrera en la que la tarea fue REPLACE. b/116253486 y b/116677275
  • Ahora WorkContinuation.combine() acepta una o más WorkContinuation en lugar de dos o más. b/117266752

Cambios rotundos en la API

  • Se quitaron todos los métodos y las clases anteriormente deprecated, en especial, el constructor Worker predeterminado.
  • La interfaz WorkerFactory y la implementación concreta DefaultWorkerFactory se fusionaron en una clase abstracta llamada WorkerFactory.
  • Se quitaron WorkManager.synchronous() y WorkContinuation.synchronous().
  • Los métodos WorkManager.getStatus*() ahora muestran ListenableFuture. WorkManager.getStatus*LiveData() muestra LiveData.

Futures

Lanzamiento de Futures 1.0.0-alpha02.

Cambios en la API

  • Ahora los desarrolladores pueden usar ResolvableFuture y AbstractResolvableFuture como implementaciones concretas livianas de ListenableFuture.

8 de octubre de 2018

Room

Lanzamiento de Room 2.1.0-alpha01.

Nuevas funciones

  • FTS: Ahora Room admite entidades con una tabla de asignación FTS3 o FTS4. Ahora las clases con anotaciones @Entity también pueden tener anotaciones @Fts3 o @Fts4 a fin de declarar una clase con una tabla de asignación de búsqueda de texto completo. Las opciones de FTS para mayor personalización están disponibles mediante los métodos de la anotación. b/62356416
  • Vistas: Ahora Room permite declarar una clase como una consulta almacenada, también conocida como vista mediante la anotación @DatabaseView. b/67033276
  • Valor automático: Ahora Room permite declarar clases con anotaciones AutoValue como entidades y POJO. Ahora puedes declarar las anotaciones @PrimaryKey, @ColumnInfo, @Embedded y @Relation de Room en métodos abstractos de la clase con anotaciones de valor. Ten en cuenta que estas anotaciones deben estar acompañadas de @CopyAnnotations para que Room pueda entenderlas correctamente. b/62408420
  • Compatibilidad con tipos de retorno Rx adicionales: Los métodos DAO con anotaciones @Insert, @Delete o @Update ahora admiten tipos de retorno Rx Completable, Single<T> y Maybe<T>. b/63317956
  • Tipos con @Relation que no cambian: Anteriormente, Room requería que los campos con anotaciones @Relation pudieran configurarse, pero ahora pueden ser parámetros de constructor.
  • enableMultiInstanceInvalidation: Nueva API en RoomDatabase.Builder para habilitar la invalidación en varias instancias de RoomDatabase con el mismo archivo de base de datos. Este mecanismo de invalidación de varias instancias también funciona con distintos procesos. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Nueva API en RoomDatabase.Builder para recrear automáticamente la base de datos si hay un cambio a una versión anterior. b/110416954
  • ignoredColumns: Nueva API en la anotación @Entity que se puede usar para crear una lista de campos ignorados según su nombre. Útil para ignorar campos heredados en una entidad. b/63522075

Cambios de comportamiento/API

  • Ahora mCallback y mDatabase en RoomDatabase están @Deprecated y se quitarán en la próxima versión de Room. b/76109329

Correcciones de errores

  • Se corrigieron dos errores en los que Room no se recuperaba correctamente de una base de datos dañada o una migración incorrecta durante la inicialización. b/111504749 y b/111519144
  • Ahora Room usará correctamente el constructor principal de Kotlin en clases de datos, lo que evita la necesidad de declarar los campos como vars. b/105769985

1 de octubre de 2018

Lanzamiento de Room 2.0.0 sin cambios desde 2.0.0-rc01. Se lanzó Paging 2.0.0 con una sola corrección de errores.

Paging

Correcciones de errores

  • Se corrigió un error que ocurría con desplazamientos rápidos mediante PositionalDataSource y marcadores de posición b/114635383.

21 de septiembre de 2018

Lanzamiento de Lifecycle 2.0.0 con una corrección de errores desde 2.0.0-rc01 en ViewModel.

Lifecycle

Correcciones de errores

  • Se corrigió un error de ProGuard de ViewModel que quitaba constructores de manera incorrecta b/112230489

20 de septiembre de 2018

Lanzamiento de Navigation 1.0.0-alpha06 con correcciones de errores y cambios en la API.

Nuevas funciones

Cambios en la API

  • Cambio rotundo: Ahora el método navigate() de Navigator toma un parámetro Navigator.Extras.
  • Ahora el método getGraph() de NavController es NonNull b/112243286

Correcciones de errores

  • NavigationUI.setupWithNavController() ya no filtra reproducciones si se usa con vistas de destinos individuales b/111961977
  • Ahora solo se llama una vez a onSaveState() de Navigator b/112627079

Safe Args

  • Ahora las clases Directions de destino de Navigation extienden su clase de Directions del nivel superior, si es que existe b/79871405
  • Ahora las clases Directions y Args tienen una implementación toString() útil b/111843389

19 de septiembre de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha09 con correciones de errores, actualizaciones de infraestructura y cambios en la API.

Problema conocido

Si encuentras el siguiente problema: "Se encontró más de un archivo con la ruta independiente 'META-INF/proguard/androidx-annotations.pro' en el SO", escribe lo siguiente en el archivo de Gradle como solución alternativa hasta que resolvamos el problema en alpha10:

    android {
        packagingOptions {
            exclude 'META-INF/proguard/androidx-annotations.pro'
        }
    }

Correcciones de errores

  • Se agregó otra corrección necesaria para el error "100 tareas". b/115560696
  • Se agregaron algunas correcciones para los errores de restricción de clave externa debido a condiciones de carrera. b/114705286
  • Se delegaron las llamadas de ConstraintTrackingWorker.onStopped(boolean) al Worker subyacente. b/114125093
  • Aplica el retraso de retirada mínimo correcto para Firebase JobDispatcher. b/113304626
  • Mejoras a las garantías de subprocesos internas de la biblioteca.
  • Correcciones de posibles problemas con el deduping de LiveData a nivel interno.

Cambios en la API

  • Para crear tus propias instancias de Worker en el tiempo de ejecución, ahora puedes especificar una WorkerFactory como parte de WorkManager.Configuration. La fábrica de resguardo es DefaultWorkerFactory, lo que coincide con el comportamiento de versiones anteriores de WorkManager.
    • Ahora los constructores predeterminados para Worker y NonBlockingWorker están identificados como obsoletos. Usa el nuevo constructor (Worker(Context, WorkerParameters)) y llama a super(Context, WorkerParameters). Las versiones futuras de WorkManager quitarán el constructor predeterminado.
  • Comenzamos a usar el nuevo artefacto ListenableFuture a nivel interno (libre de dependencias de Guava). Implementaremos ListenableFutures a la API en las próximas versiones. Este cambio permitirá que se muestre NonBlockingWorker eventualmente.
  • Agrega la capacidad de activar tareas programadas en TestDriver a través de TestDriver.setInitialDelayMet(UUID) y TestDriver.setPeriodDelayMet(UUID). b/113360060

Cambios rotundos

  • Los constructores predeterminados Worker y NonBlockingWorker dejaron de estar disponibles. Migra al nuevo constructor tan pronto como sea posible. Las próximas versiones quitarán el constructor predeterminado.

27 de agosto de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha08 con corrección de errores.

Correcciones de errores

  • Los componentes de WorkManager etiquetados explícitamente como directos inician de manera inadvertida a fin de que no se activen durante el inicio directo. En el futuro, proporcionaremos una versión de WorkManager que inicie directamente. b/112665532
  • Se corrigió un problema en el que las tareas que se reintentaron no se ejecutaban. b/112604021
  • Se corrigieron las tareas periódicas que no se ejecutaban reiteradamente (relacionado con el problema anterior). b/112859683
  • Se cumplieron las políticas de retirada cuando el proceso de la app ya estaba ejecutándose.
  • Se corrigieron los mensajes de excepción en Data para indicar que el límite es 10 KB.
  • Se redujo el valor mínimo de Configuration.setMaxSchedulerLimit(int) a 50 para tener en cuenta la latencia al completar el procesamiento de JobScheduler. b/112817355

16 de agosto de 2018

WorkManager

Se lanza WorkManager 1.0.0-alpha07 con corrección de errores y cambios menores en la API.

Correcciones de errores

  • Se corrigió una potencial consulta de SQL con límites negativos que podría mostrar un número ilimitado de resultados.
  • Ahora un trabajo que terminó de ejecutarse cancela correctamente todas las copias pendientes de ese trabajo en otros programadores. Esto provocó que se supere el límite de tareas de JobScheduler. b/111569265
  • Se corrigió una ConcurrentModificationException en ConstraintTracker. b/112272753
  • Se cambiaron las anotaciones de tipo de devolución de Data.getBooleanArray(String) y Data.getIntArray(String) por @Nullable en lugar de @NonNull. b/112275229

Cambios en la API

  • Ahora Worker extiende una clase nueva, NonBlockingWorker. Esto no afecta ningún uso actual. En el futuro, NonBlockingWorker se convertirá en una entidad compatible para las soluciones de subprocesos personalizados.
  • Se cambiaron las anotaciones de tipo de devolución de Data.getBooleanArray(String) y Data.getIntArray(String) por @Nullable en lugar de @NonNull. b/112275229
  • Extensiones de Kotlin: Map.toWorkData() dejó de estar disponible y se agregó un workDataOf(vararg Pair<String, Any?>) de nivel superior para mayor coherencia con las API existentes.

10 de agosto de 2018

Lanzamiento de Navigation 1.0.0-alpha05 con corrección de errores.

Correcciones de errores

  • Se corrigió un error que ocasionaba un comportamiento incorrecto de la pila de actividades. b/111907708
  • Se corrigió un error de clases Generated Args en equals(). b/111450897
  • Se corrigió un error de compilación en Safe Args. b/109409713
  • Se corrigió una conversión de identificadores de recursos a nombres de Java. b/111602491
  • Se corrigieron mensajes de error sobre la nulidad en el complemento de Safe Args.
  • Se agregaron anotaciones de nulidad que faltaban.

6 de agosto de 2018

Versiones para AndroidX de Lifecycle, Room y versión de lanzamiento 2.0.0-rc01 de Paging. Ningún artefacto cambió desde 2.0.0-beta01.

1 de agosto de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha06 con corrección de errores.

Correcciones de errores

  • Se evitó un bloqueo de la base de datos al programar un trabajo. b/111801342
  • Se corrigió un error que provocaba que PeriodicWork no se ejecutara en función de lo programado cuando estaba activado el modo Descanso. b/111469837
  • Se corrigió una condición de carrera en la que las limitaciones de seguimiento provocaban que WorkManager fallara. googlecodelabs/android-workmanager/issues/56
  • Se crearon WorkRequests únicas durante el uso de WorkRequest.Builder#build(). b/111408337
  • Se habilitó el uso de RescheduleReceiver solo cuando hay WorkRequests que lo necesitan. b/111765853

24 julio de 2018

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha05 con importantes correcciones de errores y cambios de registro.

Cambios en la API

  • Ahora WorkManager.getInstance() tiene anotaciones con @NonNull en lugar de @Nullable. Si el singleton no se inicializó correctamente en los casos de inicialización manual, el método mostrará una IllegalStateException en su lugar. Esto es un cambio rotundo en materia de API.
  • Se agregó una nueva API, Configuration.Builder.setMinimumLoggingLevel(int), que puede controlar la verbosidad de WorkManager. De manera predeterminada, WorkManager registra Log.INFO y versiones superiores.
  • Se cambió la firma de Data.getString(), de manera que ya no toma un valor predeterminado (es null de manera implícita). Esto es un cambio rotundo en materia de API.
  • Se identificaron como @hide algunos métodos que solo se necesitan para uso interno. Esto incluye al constructor Constraints, Data.toByteArray() y Data.fromByteArray(byte[]). Esto es un cambio rotundo en materia de API.

Correcciones de errores

  • WorkManager ya no ejecuta trabajos durante los casos conocidos de copias de seguridad automáticas. Esto podría haber ocasionado una falla. b/110564377
  • Se corrigió la programación doble de PeriodicWorkRequests durante el uso de JobScheduler. b/110798652
  • Se corrigió un problema con PeriodicWorkRequests que no se ejecutaban correctamente después de que un dispositivo estaba en descanso. b/111469837
  • Se solucionó un problema con retrasos iniciales durante el uso de Firebase JobDispatcher. b/111141023
  • Se solucionaron algunas potenciales condiciones de carrera y problemas de sincronización.
  • Se liberaron correctamente BroadcastReceivers que ya no eran necesarios.
  • Se optimizó el rendimiento de la reprogramación durante el reinicio de las apps después de un cierre forzado.
  • Se permitió el llamado a TestScheduler.setAllConstraintsMet(UUID) antes o después de colocar en cola la WorkRequest determinada. b/111238024

Cambios rotundos

  • Ahora WorkManager.getInstance() tiene anotaciones con @NonNull en lugar de @Nullable.
  • Se cambió la firma de Data.getString(), de manera que ya no toma un valor predeterminado (es null de manera implícita).
  • Se identificaron como @hide algunos métodos que solo se necesitan para uso interno. Esto incluye al constructor Constraints, Data.toByteArray() y Data.fromByteArray(byte[]).

19 de julio de 2018

Navigation 1.0.0-alpha04 y los complementos Safe Args Gradle asociados incluyen varios cambios de API, cambios de comportamiento y soluciones de errores.

Cambios de comportamiento/API

  • NavHostFragment siempre establecerá el fragmento actual como el fragmento de navegación principal a fin de garantizar que los administradores de fragmentos secundarios aparezcan antes que el NavController externo b/111345778

Safe Args

  • Cambio rotundo: app:type se reemplazó por app:argType para evitar conflictos con otras bibliotecas, como ConstraintLayout 2.0.0-alpha1 b/111110548
  • Ahora es posible hacer clic en los mensajes de error de Safe Args b/111534438
  • Ahora las clases Args confirman que los atributos NonNull en realidad no son nulos b/111451769
  • Se agregaron anotaciones NonNull adicionales a clases generadas por NavDirections y Args b/111455455 b/111455456

Correcciones de errores

  • Se corrigió un problema con el botón Back del sistema después de establecer un vínculo directo con un destino de fragmento. b/111515685

25 de julio de 2018

Navigation 1.0.0-alpha03 y los complementos Safe Args Gradle asociados incluyen varios cambios de API, cambios de comportamiento y soluciones de errores.

Cambios de comportamiento/API

  • Se agregó un método NavigationUI.setupWithNavController para la Barra Google b/109868820
  • Se agregó un método NavigationUI.setupWithNavController para CollapsingToolbarLayout b/110887183
  • Ahora popBackStack() se muestra como falso cuando la pila de actividades está vacía o cuando el ID de destino proporcionado no está en la pila de actividades b/110893637
  • Ahora FragmentNavigator ignora las operaciones de navegación una vez que FragmentManager tiene el estado de guardado y evita las excepciones de "No se puede realizar esta acción después de onSaveInstanceState" b/110987825

Safe Args

  • Cambio rotundo: Los caracteres que no sean alfanuméricos en los nombres de acciones y argumentos se reemplazarán por capitalización medial en los nombres de métodos NavDirections respectivos.
    • P. ej.: DemoController.index se convertirá en setDemoControllerIndex b/79995048
    • P. ej.: action_show_settings se convertirá en actionShowSettings b/79642240
  • Cambio rotundo: Ahora, los argumentos se consideran no nulos de manera predeterminada. Para permitir los valores nulos en cadenas y argumentos parcelables, agrega app:nullable="true" b/79642307
  • Ahora puedes usar app:type="long" con defaultValues en forma de "123L" b/79563966
  • Ahora los argumentos parcelables están permitidos mediante el uso de un nombre de clase calificado para app:type. El único valor predeterminado permitido es "@null" b/79563966
  • Ahora las clases Args implementan equals() y hashCode() b/79642246
  • Ahora el complemento Safe Args se puede aplicar a proyectos de bibliotecas b/80036553
  • Ahora el complemento Safe Args se puede aplicar a proyectos futuros b/110011752

Correcciones de errores

  • Se corrigieron errores de navegación durante los métodos de ciclo de vida del fragmento. b/109916080
  • Se corrigieron problemas de navegación en gráficos anidados varias veces. b/110178671
  • Se solucionaron problemas durante el uso de setPopUpTo con el primer destino en el gráfico. b/109909461
  • Se solucionaron problemas en los que todos los valores app:defaultValue pasaban como cadenas. b/110710788
  • Ahora el aapt2 empaquetado con el complemento Gradle de Android 3.2 Beta 01 agrega reglas de mantenimiento para cada atributo android:name en los archivos XML de navegación. b/79874119
  • Se solucionó la pérdida de memoria durante el reemplazo del FragmentNavigator predeterminado. b/110900142

2 de julio de 2018

Versiones para AndroidX de Lifecycle, Room y versión de lanzamiento 2.0.0-beta01 de Paging.

Lifecycle

Correcciones de errores

  • Se corrigió la regla ProGuard de LifecycleObserver solo para mantener implementaciones, y no subinterfaces. b/71389427
  • Se corrigieron las reglas ProGuard de ViewModel para permitir la ofuscación y la contracción.

Room

Cambios de comportamiento/API

  • Se agregó RoomDatabase.Builder.setQueryExecutor() para permitir la personalización del lugar donde se ejecutan las consultas.
  • Se agregó compatibilidad con Observable de RxJava2.
  • Ahora las implementaciones generadas de DAO y Database son definitivas.

Correcciones de errores

  • Especifica el nombre de clase/campo en el error "no se puede encontrar un captador para el campo". b/73334503
  • Se corrigió la compatibilidad de versiones anteriores de RoomOpenHelper con versiones anteriores de Room. b/110197391

Paging

Correcciones de errores

  • Se corrigió el contenido que desaparecía en algunos casos anexados (marcadores de posición inhabilitados, PositionalDataSource). b/80149146
  • (Ya se lanzó en 1.0.1) Se corrigieron fallas en las que PagedListAdapter y AsyncPagedListDiffer no identificaban eventos de movimiento. b/110711937

26 de junio de 2018

Paging

Paging 1.0.1 se lanzó con una sola corrección de errores en runtime. Recomendamos usar 1.0.1 para mayor estabilidad. También se lanzó Paging RxJava2 1.0.1 y es idéntico a 1.0.0-rc1.

Correcciones de errores

  • Se solucionaron fallas en las que PagedListAdapter y AsyncPagedListDiffer no identificaban eventos de movimiento. b/110711937

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha04.

Correcciones de errores

  • Ahora las PeriodicWorkRequests se reprogramaron correctamente para el uso de la implementación basada en AlarmManager.

  • Se corrigió un potencial ANR durante la reprogramación de todos los trabajadores después de una detención forzada o un reinicio. b/110507716

  • Se agregaron anotaciones de nulidad a varias API de WorkManager. b/110344065

  • Se registraron las excepciones no capturadas que ocurren durante la ejecución de Worker. b/109900862

  • Se permitieron las migraciones de bases de datos destructivas en caso de que decidas volver a una versión anterior de WorkManager. b/74633270

  • Se solucionó una falla de migración que ocurría cuando se creaban etiquetas implícitas duplicadas. Este es un problema muy poco usual que solo ocurría si usabas el mismo formato de etiqueta implícita.

19 de junio de 2018

Room

Lanzamiento de Room 1.1.1. Esta versión es idéntica a Room 1.1.1-rc1.

WorkManager

Lanzamiento de WorkManager 1.0.0-alpha03.

Correcciones de errores

  • Se corrigió una condición de carrera en la implementación basada en AlarmManager. b/80346526.

  • Se corrigió la duplicación de tareas durante el uso de JobScheduler después de reiniciar un dispositivo.

  • Ahora las tareas con URI de contenido persisten entre reinicios. b/80234744

  • Actualizaciones de documentación. b/109827628, b/109758949, b/80230748

  • Se solucionó una falla que se producía al volver a colocar en cola una WorkRequest. b/109572353.

  • Se solucionaron las advertencias de compilador Kotlin durante el uso de la dependencia work-runtime-ktx.

  • Ahora WorkManager usa Room versión 1.1.1-rc1.

Cambios en la API

  • Se agregó getStatusesSync(), la versión síncrona de WorkContinuation.getStatuses().

  • Worker permite distinguir entre una cancelación iniciada por el usuario y una detención temporaria solicitada por el SO. Worker.isStopped() muestra true si se solicitó algún tipo de detención. Worker.isCancelled() muestra true cuando el trabajo se ha cancelado de manera explícita. b/79632247

  • Se agregó compatibilidad con JobParameters#getNetwork() en la API 28. Se expone a través de Worker.getNetwork().

  • Se agregó Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) para que puedas decidir la cantidad de trabajos que se envían a JobScheduler o AlarmManager. Esto ayuda a evitar que WorkManager tome todos tus espacios de JobScheduler disponibles.

  • Se agregó Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), que ayuda a definir un rango de ID de tarea de JobScheduler para que use WorkManager. b/79996760

  • Worker.getRunAttemptCount() muestra el conteo de ejecución actual de un Worker determinado. b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) te permite poner en cola una PeriodicWorkRequest única. b/79600647

  • WorkManager.cancelAllWork() cancela todos los Workers. Las bibliotecas que dependen de WorkManager pueden realizar consultas cuando este método se solicitó por última vez al usar WorkManager.getLastCancelAllTimeMillis() para una limpieza adicional de la lista interna.

  • Se agregó WorkManager.pruneWork() para quitar las tareas completadas de la base de datos interna. b/79950952, b/109710758

Cambios en los comportamientos

  • Se agregó una etiqueta implícita para todas las WorkRequests, que es el nombre de clase calificado para el Worker. Esto permite quitar las WorkRequests sin tags o cuando el id no está disponible. b/109572351

Cambios rotundos

  • Se cambió el nombre de Worker.WorkerResult por Worker.Result.

  • Worker.onStopped ahora tiene un parámetro adicional isCancelled configurado entrue cuando el Worker se canceló de manera explícita.

7 de junio de 2018

Se lanzó Navigation 1.0.0-alpha02.

Cambios en los comportamientos

  • Ahora FragmentNavigator usa setReorderingAllowed(true). b/109826220

  • Ahora Navigation usará URLDecodes para los argumentos analizados a partir de URL de vínculo directo. b/79982454

Correcciones de errores

  • Se corrigió una IllegalStateException que ocurría cuando se llamaba la navegación desde métodos de ciclos de vida de fragmentos. b/79632233

  • Ahora la navegación depende de la Biblioteca de compatibilidad 27.1.1 para corregir el parpadeo cuando se usan animaciones. b/80160903

  • Se corrigió una IllegalArgumentException que ocurría cuando se usaba defaultNavHost="true" como un fragmento secundario. b/79656847

  • Se corrigió un StackOverflowError que ocurría cuando se usaba NavDeepLinkBuilder. b/109653065

  • Se corrigió una IllegalArgumentException que ocurría cuando se navegaba hacia atrás en un gráfico anidado. b/80453447

  • Se corrigió un error con la superposición de fragmentos que ocurría cuando se usaba launchSingleTop. b/79407969

  • Ahora la navegación crea la pila de actividades sintética correcta para gráficos anidados. b/79734195

  • Ahora NavigationUI resaltará el elemento correcto cuando se use un gráfico anidado como MenuItem. b/109675998

Cambios en la API

  • El atributo clearTask para acciones y la API asociada en NavOptions dejaron de estar disponibles. b/80338878

  • El atributo launchDocument para acciones y la API asociada en NavOptions dejaron de estar disponibles. b/109806636

24 de mayo de 2018

Lanzamiento de WorkManager 1.0.0-alpha02.

WorkManager

Correcciones de errores

  • Se corrigió una NullPointerException en State.isFinished(). b/79550068

  • Se corrigió un problema que ocasionaba que los Workers se reprogramaran en Application.onCreate(). b/79660657

  • Se corrigió un problema que ocasionaba que se pudieran programar más tareas de las que permitía el SO. b/79497378

  • Se movió la limpieza de bloqueos de activación asociados a Workers al subproceso en segundo plano.

  • Ahora la implementación de AlarmManager se limpia correctamente cuando se completa todo el trabajo pendiente.

  • Se corrigió la limpieza de consultas de SQL que afectaba a las configuraciones regionales distintas del inglés. b/80065360

  • Se agregó compatibilidad con floats en Data. b/79443878

  • Ahora Data.Builder.putAll() muestra una instancia del Builder. b/79699162

  • Más Javadoc y correcciones en la documentación. b/79691663

Cambios en la API

  • Los Workers pueden reaccionar a una detención. Worker.isStopped() se puede usar para verificar si se detuvo un Worker. Worker.onStopped() se puede usar para realizar operaciones de limpieza livianas.

  • La API Worker.getTags() muestra un Set de etiquetas asociadas con el Worker.

  • Se agregaron sobrecargas de javax.time.Duration para API que usan una combinación de duración y TimeUnits. Esto lo supervisa @RequiresApi(26).

  • Las extensiones de WorkManager se trasladaron del paquete androidx.work.ktx al paquete androix.work. Las extensiones anteriores dejaron de estar disponibles y se quitarán en una versión futura.

  • Configuration.withExecutor() dejó de estar disponible. Usa Configuration.setExecutor() en su lugar.

16 de mayo de 2018

Lanzamiento de Paging RxJava2 1.0.0-rc1 y Room 1.1.1-rc1. Recomendamos usar 1.1.1-rc1 en lugar de 1.1.0 si usas migraciones.

Room

Se solucionó un error en el que Room no administraba correctamente la inicialización posterior a la migración. b/79362399

Paging

Paging rxjava2 pasa a la versión potencial sin cambios respecto de la versión Alfa inicial.

8 de mayo de 2018

Paging 1.0, versiones Alfa de Navigation y WorkManager, Room 1.1, AndroidX

Lanzamiento de Paging 1.0.0 y Room 1.1.0, además de versiones Alfa para dos componentes de la arquitectura nuevos: Navigation y WorkManager.

Paging y Room no tuvieron cambios desde las versiones potenciales más recientes.

Biblioteca nueva: Navigation

Navigation proporciona un marco de trabajo para desarrollar la navegación desde la app. Este lanzamiento inicial es 1.0.0-alpha01.

Biblioteca nueva: WorkManager

WorkManager simplifica la programación y la ejecución de trabajo en segundo plano garantizado y optimizado para limitaciones. Este lanzamiento inicial es 1.0.0-alpha01.

AndroidX

Los componentes de la arquitectura pasarán a formar parte de AndroidX, incluidos los nombres de paquetes actualizados, los nombres de artefactos y las dependencias en otras bibliotecas de AndroidX. Se lanzan bajo la versión 2.0.0-alpha1 para su uso en conjunto con otras bibliotecas de AndroidX.

Extensiones Kotlin

ViewModel, ReactiveStreams y Sqlite (anteriormente, el componente "Database" de Room) tienen bibliotecas de extensión Kotlin incorporadas como parte de la versión Alfa de AndroidX. Además, Navigation y WorkManager incluyen módulos -ktx. Cada uno de esos módulos de extensión se puede encontrar en agregar componentes.

2 de mayo de 2018

  • Versión potencial Room 1.1.0
  • Lanzamiento de Room 1.1.0-rc1

Correcciones de errores

  • Ahora Room es compatible con Kotlin 1.2.40. b/78328708

19 de abril de 2018

Versión potencial de Paging

Lanzamiento de Paging 1.0.0-rc1 y Room 1.1.0-beta3.

Paging

No tenemos problemas conocidos o características nuevas previstos para el lanzamiento de Paging 1.0.0. Actualiza tu proyecto para usar 1.0.0-rc1 y ayúdanos a ponerlo a prueba para que podamos crear una versión 1.0.0 confiable.

No hay cambios en esta versión, es igual a 1.0.0-beta1.

Room

Correcciones de errores

  • Se corrigió un error de compilación que ocurría cuando un POJO de Kotlin hacía referencia a una entidad de relación que se había definido en Java. b/78199923

5 de abril de 2018

Lanzamiento de Room 1.1.0-beta2, Paging 1.0.0-beta1 y Paging RxJava 1.0.0-alpha1.

Paging estará en versión Beta durante un breve período de tiempo antes de pasar a la versión potencial. No tenemos planificado ningún cambio adicional de API para Paging 1.0 y los estándares para cambios de API son muy altos.

Lanzamiento de compatibilidad de Alpha RxJava2 con Paging como módulo opcional por separado (android.arch.paging:rxjava2:1.0.0-alpha1). Tendrá una versión por separado temporalmente hasta que se estabilice.

Esta biblioteca nueva proporciona una alternativa RxJava2 respecto de LivePagedListBuilder, capaz de crear Observables y Flowables, y de tomar Schedulers en lugar de Executors:

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Paging

Nuevas funciones

  • Se agrega RxPagedListBuilder mediante el nuevo artefacto android.arch.paging:rxjava2.

Cambios en la API

  • Cambios de API para aclarar el rol de los ejecutores en los creadores.

    • Cambió el nombre de setBackgroundThreadExecutor() a setFetchExecutor() (en PagedList.Builder y LivePagedListBuilder)

    • Cambió el nombre de setMainThreadExecutor() a setNotifyExecutor() (en PagedList.Builder).

  • El miembro de PagedList.mCallbacks ahora es privado.

Correcciones de errores

  • LivePagedListBuilder activa una carga inicial de PagedList en el ejecutor especificado, en lugar de hacerlo en el grupo de subprocesos de IO de los componentes de la arquitectura.

  • Se corrigió un comportamiento no válido en wrappers DataSource internos (que se usan para implementar DataSource.map, además de la carga de PositionalDataSource inhabilitada por marcadores de posición). b/77237534

Room

Correcciones de errores

  • Se solucionó un error crítico en las implementaciones Single y Maybe de Room Rx, en el que se reciclaba la consulta antes de tiempo, lo que ocasionaba problemas si agregabas más de un observador a las instancias de Single o Maybe que se habían mostrado. b/76031240

  • RoomDatabase.clearAllTables no VACUUM la base de datos si se invoca desde dentro de una transacción. b/77235565

21 de marzo de 2018

Lanzamiento de Room 1.1.0-beta1, Paging 1.0.0-alpha7 y Lifecycles 1.1.1.

Room

Cambios en la API

Correcciones de errores

  • Ahora RoomDatabase.clearAllTables intenta mostrar espacio al sistema operativo al configurar un punto de control de WAL y realizar un VACUUM de la base de datos.

  • Ahora @RawQuery acepta cualquier Pojo para la propiedad observedEntities, siempre que el Pojo tenga referencias a una o más entidades a través de sus campos Embedded o Relations. b/74041772

  • Paging: Ahora la implementación DataSource de Room administra correctamente dependencias con varias tablas (como relaciones y uniones). Anteriormente, fallaban al activar resultados nuevos o hacer una compilación. b/74128314

Lifecycles

Solo un pequeño cambio: android.arch.core.util.Function se trasladó de arch:runtime a arch:common. Esto permite usarla sin la dependencia del tiempo de ejecución, p. ej., en paging:common a continuación.

lifecycle:common es una dependencia de lifecycle:runtime, de manera que este cambio no afecta a lifecycle:runtime directamente, sino que solo afecta a los módulos que dependen de manera directa de lifecycle:common, como sucede con Paging.

Paging

Paging 1.0.0-alpha7 se lanza junto con Lifecycles 1.1.1. Como Paging alpha7 depende del movimiento de la clase Function mencionada anteriormente, necesitarás actualizar tu dependencia de lifecycle:runtime a android.arch.lifecycle:runtime:1.1.1.

Está planificado que Paging alpha7 sea la última versión antes de alcanzar la versión Beta.

Cambios en la API

  • Ahora los objetos DataSource.LoadParams tienen un constructor público y los objetos DataSource.LoadCallback son abstractos. Esto permite envolver una DataSource o directamente probar una DataSource con una devolución de llamada de prueba. b/72600421
  • Mappers para DataSource y DataSource.Factory
    • map(Function<IN,OUT>) te permite transformar, envolver o decorar los resultados cargados por una DataSource.
    • mapByPage(<List<IN>,List<OUT>>) te permite hacer lo mismo para el procesamiento por lotes (p. ej., si los elementos cargados a partir de SQL necesitan consultar una base de datos por separado, la acción se puede realizar como un lote).
  • Se agregó PagedList#getDataSource() como método de conveniencia. b/72611341
  • Se quitaron de la API todas las clases que dejaron de estar disponibles, incluidas las partes que quedaron del paquete recyclerview.extensions y el LivePagedListProvider.
  • Se cambió DataSource.Factory de una interfaz a una clase abstracta a fin de habilitar la funcionalidad de mapa.

Correcciones de errores

  • Se cambiaron los Builders y ahora son definitivos. b/70848565
  • La implementación de DataSource de Room ahora administra consultas con varias tablas. Esta corrección está incluida en Room 1.1.0-beta1 (consulta más arriba).
  • Se corrigió un error en el que no se invocaba a BoundaryCallback.onItemAtEndLoaded para PositionalDataSource si los marcadores de posición estaban habilitados y el tamaño total era un múltiplo exacto del tamaño de la página.

2 de marzo de 2018

Lanzamiento de Room 1.1.0-alpha3. Esta es la última versión Alfa planificada de Room 1.1.0.

Cambios en la API

  • Ahora todos los métodos addObserver y removeObserver de InvalidationTracker son asíncronos y se deben llamar en un proceso que no sea de IU. Esto evita algunas condiciones de carrera mientras se observan tablas.

  • Hay un nuevo método clearAllTables() en la clase RoomDatabase que truncará todos los contenidos de la tabla. b/63807999

  • Ahora SupportSQLiteQuery tiene un método getArgCount() que muestra la cantidad de parámetros de consulta. b/67038952

Correcciones de errores

  • Ahora @RawQuery es compatible con las consultas de Paging. b/72600425

  • Ahora Room nombra correctamente las clases Dao generadas para evitar conflictos de nombres cuando dos o más interfaces de Dao son clases internas en el mismo paquete y tienen el mismo nombre. b/73536380

  • Los tipos de campo genéricos en Pojos se analizan correctamente como miembros de la clase extendida. b/73534868

  • Los parámetros de consulta en las interfaces Dao que se heredaron de artefactos de dependencia ahora se analizan correctamente. b/68118746

  • Ahora las consultas generadas para @Relations tienen un formato de escape correcto para los nombres de campo. b/70925483

27 de febrero de 2018

Lanzamiento de Paging 1.0.0-alpha6 junto con el lanzamiento de la Biblioteca de compatibilidad 27.1.0. ListAdapter y algunas clases relacionadas pasaron de la Biblioteca de Paging directamente a Recyclerview, junto con algunos cambios de nombres para que la función de determinadas clases esté más clara. Es probable que esta versión Alfa de Paging sea la última que tenga cambios importantes de la API.

Cambios en la API

  • Las clases se trasladaron a recyclerview-v7:
    • ListAdapter
  • Se cambió el nombre de las clases y se trasladaron a recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • Se cambió el nombre de las clases dentro del tiempo de ejecución de Paging:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

Las clases que se trasladaron eran útiles junto con RecyclerView, independientemente de la Biblioteca de Paging. Esto quiere decir que se pueden usar sin depender de una versión Alfa de Paging. Además, las apps que usan Paging deben actualizarse a Alpha 6 y la Biblioteca de compatibilidad 27.1.0 al mismo tiempo.

** Guía de migración para Alpha6 de Paging: **

  • Actualiza las dependencias de Paging y RecyclerView a android.arch.paging:runtime:1.0.0-alpha6 y com.android.support:recyclerview-v7:27.1.0.
    • Se debe realizar de manera simultánea, ya que ListAdapter pasó de Paging a RecyclerView.
  • Actualiza cualquier referencia de ListAdapterHelper a AsyncListDiffer.
    • Se quitaron getItem(index)/getItemCount() y se reemplazaron por el patrón de llamar a getCurrentList().getItem(index) y getCurrentList().size(), que son más explícitos.
  • Actualiza todas las referencias de ListAdapterConfig a AsyncDifferConfig.
  • Actualiza todas las referencias de DiffCallback a DiffUtil..IttemCallback
  • Actualiza todas las referencias de PagedListAdapterHelper a AsyncPagedListDiffer.
  • Actualiza todas las referencias de setList() a submitList().
    • Se cambió el nombre para aclarar la naturaleza asincrónica de diffing de lista.

Correcciones de errores

  • Se corrigió el paso incorrecto de la posición inicial a la carga inicial cuando se inhabilitan los marcadores de posición. b/73513780

15 de febrero de 2018

Lanzamiento de Room 1.1.0-alpha2.

Nuevas funciones

  • Ahora Room admite abrir una base de datos en el modo escribir antes de registrar. En este modo, las escrituras ya no bloquearán las consultas de lectura. Aunque consume más memoria (debido a varias conexiones), este modo suele ser más rápido. De manera predeterminada, Room usará WAL si el dispositivo es API 16 o superior y no es un dispositivo con memoria reducida. Para controlar este comportamiento, puedes usar el método setJournalMode() en RoomDatabase.Builder. b/67757002

  • Compatibilidad con Guava: Ahora Room permite mostrar Guava Optional<T> o ListenableFuture<T> en consultas DAO. Para usar ListenableFuture<T>, debes importar el artefacto guava de Room (android.arch.persistence.room:guava:1.1.0-alpha2).

  • Ahora Room permite mostrar java.util.Optional<T> en consultas DAO.

  • Los métodos de interfaz con implementaciones predeterminadas ahora están permitidos en métodos @Transaction en clases DAO. Esto funciona tanto para Java 8 como para Kotlin. b/72416735

Correcciones de errores

  • Los constructores con @Relation no causarán un error de compilación si hay otro constructor que pueda utilizarse. b/72884434

  • Los nombres de tabla con ' como carácter de escape en métodos @Query ahora tienen un formato de escape correcto para el seguimiento de invalidación. b/72366965

  • Ahora Room usa las anotaciones @Metadata de Kotlin para leer la estructura de clase durante el proceso de anotación. Esto quiere decir que, incluso si se heredó un POJO de una dependencia, sus nombres de parámetro de constructor se pueden leer correctamente. b/67181813

  • Se corrigió un problema relacionado con la búsqueda de rutas de migración a versiones anteriores. b/72153525

  • Ahora los tipos de columnas no predeterminados se administran correctamente durante la migración de una base de datos existente a Room. b/71953987

  • Ahora Room administra correctamente los campos boolean? persistentes en clases Kotlin. b/72786402

22 de enero de 2018

Lanzamiento de Lifecycles 1.1.0, Room 1.1.0-alpha1 y Paging 1.0.0-alpha5.

Lifecycle 1.1.0

Cambios de empaquetado

Ahora hay dependencias nuevas y mucho más pequeñas disponibles:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

Cambios en la API

  • Se quitaron LifecycleActivity y LifecycleFragment, ya que dejaron de estar disponibles. En su lugar, usa FragmentActivity, AppCompatActivity o asegúrate de que Fragment sea compatible.
  • Se agregaron anotaciones de @NonNull a ViewModelProviders y ViewModelStores
  • El constructor ViewModelProviders dejó de estar disponible. Usa sus métodos estáticos directamente.
  • ViewModelProviders.DefaultFactory dejó de estar disponible. Usa ViewModelProvider.AndroidViewModelFactory
  • Se agregó el método ViewModelProvider.AndroidViewModelFactory.getInstance(Application) estático para recuperar un Factory estático apto para la creación de instancias ViewModel y AndroidViewModel.

Room 1.1.0-alpha1

Nuevas funciones

  • RawQuery: Esta nueva API permite que los métodos @Dao reciban a SQL como un parámetro de consulta b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: Esta nueva API en RoomDatabase.Builder permite controlar de manera más detallada desde qué versiones de inicio se permiten las migraciones destructivas (en comparación con fallbackToDestructiveMigration) b/64989640
  • Ahora Room solo es compatible con las API de Paging más recientes (alpha-4+), de manera que ya no admite LivePagedListProvider, que dejó de estar disponible. Para usar la nueva versión Alfa de Room, debes usar Paging alpha-4 o versiones superiores y cambiar de LivePagedListProvider a LivePagedListBuilder si todavía no lo hiciste.

Correcciones de errores

  • Compatibilidad mejorada para tipos Kotlin Kapt. b/69164099
  • El orden de los campos ya no invalida el esquema. b/64290754

Paging 1.0.0-alpha5

Correcciones de errores

  • Se corrigió la carga de la página cuando los marcadores de posición están inhabilitados b/70573345
  • Registro adicional para rastrear errores IllegalArgumentException b/70360195 (y correcciones especulativas de Room)
  • Correcciones de código de muestra de Javadoc b/70411933, b/71467637

11 de diciembre de 2017

Lanzamiento de Paging alpha4-1. Pequeño lanzamiento de corrección de errores para Paging Alpha 4.

Correcciones de errores

  • No se verifican los parámetros de devolución de llamada para las fuentes de datos no válidas. b/70353706, b/70360195

7 de diciembre de 2017

Lanzamiento de Paging alpha4, con cambios y adiciones significativos, principalmente casos de uso de red de orientación y red + base de datos.

Cambios en la API

  • Ahora DataSource es una API asíncrona para que la paginación directa desde la red sea más fácil.

    • Un solo punto de entrada para el tamaño y los datos iniciales
    • Retiene la devolución de llamada y despacha más tarde para permitir volver a intentar con la red
    • Las devoluciones de llamada de subprocesos seguros permiten la carga asíncrona para crear una sola PagedList respaldada por la red en el subproceso de IU
    • Se mejoró el comportamiento de error relacionado con los parámetros de carga iniciales
  • Se cambió el nombre de TiledDataSource por PositionalDataSource para reflejar su indexación basada en la posición y el hecho de que no se muestra en mosaicos cuando se inhabilitan los marcadores de posición.

  • Se agregó PageKeyedDataSource para brindar compatibilidad con los tokens anteriores/siguientes incorporados en las cargas de página de red. Se cambió el nombre de KeyedDataSource por ItemKeyedDataSource para que la diferencia sea más clara.

  • LivePagedListBuilder y DataSource.Factory reemplazaron a LivePagedListProvider. El constructor brinda la misma capacidad con más personalización y valores predeterminados más sencillos. Factory permite que el código de generación de DataSource permanezca independiente de LiveData.

  • Se agregó PagedList.BoundaryCallback para el caso de uso de base de datos + red.

  • El constructor PagedList.Builder toma DataSource + PagedList.Config, que ahora es más similar a LivePagedListBuilder, y permite el operador Diamante en el lenguaje Java o en los tipos inferidos en Kotlin.

  • Se agregó PagedList.getConfig() y ahora PagedList.Config tiene propiedades de miembro públicas.

  • KeyedDataSource.loadBefore() ya no espera resultados invertidos.

  • Se agregó PagedListAdapter.onCurrentListChanged() para escuchar actualizaciones sobre la PagedList que se muestra.

Correcciones de errores

  • Se corrigió IndexOutOfBoundsException en PagedListAdapter(Helper). b/67883658

1.0.0: 6 de noviembre de 2017

Ahora todos los componentes principales (excepto Paging) son 1.0.0. Esta es exactamente la misma versión que rc1, excepto por un cambio en la biblioteca de reactivestreams.

Correcciones de errores

Versión potencial: 18 de octubre de 2017

Ahora todos los artefactos principales (excepto Paging) son 1.0.0-rc1.

No tenemos más problemas conocidos ni características nuevas programados para la versión 1.0.0. Actualiza tu proyecto para usar 1.0.0-rc1 y ayúdanos a ponerlo a prueba para que podamos crear una versión 1.0.0 confiable.

Cambio de comportamiento

  • Con esta versión, Lifecycle.Event#ON_STOP se despacha cuando se llama a onSaveInstanceState (anteriormente solo se marcaba como CREATED sin despachar ON_STOP). Puedes obtener más información al respecto en la documentación de Lifecycles.

Correcciones de errores

  • Room:

    • Ahora Room depende del artefacto xerial más reciente que corrige los problemas de OutOfMemory durante la compilación. b/62473121
    • Ahora los métodos Query pueden tener anotaciones de @Transaction. Consulta los documentos de referencia sobre @Transaction para obtener más información. b/65112315
    • Se quitó la clase StringUtil en Room de la API pública (nunca estuvo previsto que fuese una API pública).
  • Lifecycles:

    • Ahora LiveData funciona correctamente cuando la actividad está cubierta parcialmente en la API < 24. b/65665621

    • Ahora se llama correctamente a los métodos OnLifecycleEvent en las clases superiores o se imprime una advertencia durante la compilación en caso de no ser posible. b/63474615

    • Ahora Lifecycle devuelve una WeakReference a su LifecycleOwner para evitar las fugas de LifecycleOwner si Lifecycle está en la memoria más tiempo de lo habitual (solo es una advertencia, aunque deberías tener cuidado para no ocasionar fugas del Lifecycle).

9 de octubre de 2017

Se lanzó Paging alpha-3, que es compatible con la versión beta 2 de Lifecycles y Room.

Correcciones de errores

  • Se mejoró la documentación de Paging.

5 de octubre de 2017

Ahora todos los artefactos principales (excepto Paging) son beta 2. No hay ninguna versión nueva de Paging en este lanzamiento.

Correcciones de errores

  • Lifecycles:

    • Ahora LiveDataReactiveStreams anula correctamente la suscripción del publicador de fuente cuando LiveData no está activo. b/62609183
    • Los eventos de Lifecycle se propagan correctamente a las clases superiores cuando la clase superior es de otro módulo. b/63474615
    • LiveData administra correctamente a los observadores cuando anulan la suscripción durante la creación de la suscripción. b/66337741
    • Ahora FullLifecycleObserver para Java 8 está disponible en el árbol de dependencias. b/66525578

    • En el caso de ProGuard, agrega las siguientes líneas a tu archivo de ProGuard. (Esto no será necesario con la versión 1.0.0)

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Room:

    • Ahora Room imprime un error en el momento de la compilación cuando el Pojo que se muestra en un método @Query tiene un campo @NonNull que no coincide con ninguna de las columnas en la respuesta a la consulta. Si el campo es @Nullable, Room solo imprime una advertencia. b/67115337
    • Ahora Room valida índices en las versiones de SO más recientes. b/63132683
    • Si hay varios constructores coincidentes en un Pojo, Room toma un constructor que no es de arg de manera predeterminada. b/67353427
    • Las claves primarias de una columna individual pueden ser Nullable si es un Integer o un Long. b/67086876
    • El seguimiento de invalidación administra correctamente el reingreso en el modo de prueba. b/65471397
    • Ahora Room verifica que no haya caracteres no válidos en los nombres de columnas y tablas en el momento de la compilación (caracteres no válidos: `, "). b/64749111

21 de septiembre de 2017

Con esta versión, todos los módulos de los componentes de la arquitectura llegan, como mínimo, a beta 1 (excepto la Biblioteca de Paging nueva, que es alpha 2).

No tenemos planificado ningún cambio adicional en la API. Podría haber cambios adicionales, pero el parámetro para cambiar una API anterior a la versión estable 1.0.0 es muy elevado y es poco probable que suceda.

  • Se quitarán LifecycleActivity y LifecycleFragment antes de la versión estable 1.0.0. No son necesarios cuando se usa la Biblioteca de compatibilidad 26.1.0 o versiones posteriores.

A diferencia de la fase Alfa, la fase Beta está programada para ser muy breve.

Cambios de versión

  • Ahora las extensiones de Lifecycle y Room son beta 1.
  • Ahora Paging es alpha 2.
  • No hubo cambios en Lifecycles (tiempo de ejecución, común) ni en Arch Core (común). Ambos artefactos están en la versión 1.0.0 desde el 13 de septiembre.

Artefactos nuevos

  • Ahora los ciclos de vida tienen un artefacto nuevo llamado common-java8. Este artefacto incluye una interfaz nueva llamada DefaultLifecycleObserver, que tiene implementaciones predeterminadas para todos los métodos de Lifecycle. Si usas Java 8, prioriza este artefacto por sobre las anotaciones.

    • Debido a un error en beta1, debes agregar una dependencia explícita en el módulo android.arch.lifecycle:common:1.0.1 para usar el artefacto common-java8 nuevo. Este problema se solucionará en beta2.

Cambios de empaquetado

  • android.arch.persistence.room.db se trasladó a android.arch.persistence.db.
  • android.arch.persistence.room.db-impl se trasladó y se cambió el nombre por android.arch.persistence.db-framework.

Ambos artefactos ya son una dependencia en Room, de manera que no deberías necesitar cambiar nada en tus archivos de compilación, a menos que los estés usando directamente.

Cambios en la API

  • Room:

    • Ahora la anotación @ColumnInfo permite definir una recopilación en la columna. b/62007004
    • Ahora los campos transient se ignoran de manera predeterminada, a menos que tengan anotaciones con @ColumnInfo, @Embedded o @Relation. b/62600692
    • Las claves primarias deben tener anotaciones con @NonNull a menos que se generen automáticamente. b/64292391
      • Este cambio puede requerir una migración del esquema. Lamentamos los inconvenientes.
    • Se agregó una nueva anotación de conveniencia (@Transaction), que anula un método DAO y lo ejecuta dentro de una transacción.
  • Compatibilidad con la base de datos SQLite:

  • Paging:

    • Se mejoró la documentación de Paging con más ejemplos y anotaciones de subprocesos.

Correcciones de errores

  • Room:
    • Las cadenas Kotlin de varias líneas en los métodos @Query se administran correctamente. b/65809374
  • Paging:
    • El artefacto Paging ya no depende de junit. b/65690261

1.0.0 Alpha 9-1: 13 de septiembre de 2017

Este es un gran lanzamiento en el que los artefactos del ciclo de vida principal (tiempo de ejecución, común) y arch core (común) llegan a la versión estable 1.0.0.

Junto con este cambio, ahora la Biblioteca de compatibilidad 26.1.0 depende de estas bibliotecas. Ahora, tanto AppCompatActivity como Support Fragment implementan la interfaz LifecycleOwner.

Este lanzamiento también depende de la Biblioteca de compatibilidad 26.1.0 para aprovechar la nueva integración.

Biblioteca nueva: Paging

Este lanzamiento también incluye una biblioteca nueva llamada Paging, que permite cargar fácilmente grandes conjuntos de datos en RecyclerView en bloques cuando sea necesario. Paging se lanza como alpha1 y tendrá su propio ciclo de lanzamiento.

Cambios en la API

Correcciones de errores

  • Ahora las clases generadas están anotadas con @Generated si la app tiene la anotación en la ruta de clase. b/35754819

  • Se corrigió el error de comparación del observador de MediatorLiveData. b/64413274

  • Ahora las consultas WITH de SQLite son compatibles con [LiveData]. [ref-LiveData]. b/62510164

  • Se corrigió un error en el que InvalidationTracker no enviaba la lista correcta si se observaba más de una tabla. b/65099281

  • Se corrigió un error en el que Room generaba archivos diferentes en Windows. b/64470691

  • Ahora los LifecycleObservers son compatibles en el paquete raíz. b/62310817

1.0.0 Alpha 9: 16 de agosto de 2017

Correcciones de errores

  • Se corrigió un error en LiveData, en el que el segundo Observer se ignoraba cuando el primero se quitaba desde su método onChanged. b/64285805

1.0.0 Alpha 8: 1 de agosto de 2017

Cambios en los comportamientos

  • Se agrega la restricción NOT NULL para columnas de tipos primitivos o columnas con anotaciones NonNull. Esto cambia la estructura de tus tablas, de manera que, si ya usas los componentes de la arquitectura de la versión Alfa 7 o de versiones anteriores, debes implementar una migración si quieres mantener los datos o usar el método fallbackToDestructiveMigration() en el constructor. b/62007004

Cambios en la API

1.0.0 Alpha 7: 26 de julio de 2017

Correcciones de errores

1.0.0 Alpha 6: 25 de julio de 2017

Cambios en los comportamientos

  • Se cambió el orden de las llamadas de LifecycleObserver. Anteriormente, se llamaba a los observadores en el orden en que habían sido agregados. Si observer1 se agregaba antes de observer2, recibiría ON_CREATE y todos los otros eventos antes de observer2. Esto ya no se aplica para los eventos de destrucción, en cuyo caso siempre se llama a los observadores en el orden inverso a aquel en el que se agregaron. El comportamiento actual es el siguiente: si observer1 se agrega antes de observer2, entonces ON_CREATE se envía primero a observer1 y luego a observer2 (lo mismo sucede para ON_START y ON_RESUME), pero el evento ON_PAUSE se envía primero a observer2 y solo entonces a observer1 (lo mismo sucede para ON_STOP y ON_DESTROY).

  • Room muestra una excepción si falta la migración. Anteriormente, Room solo limpiaba la base de datos, pero ahora falla. Los desarrolladores pueden habilitar el comportamiento de limpieza llamando a las API del constructor. b/63872392

Cambios en la API

  • Se agregó el método fallbackToDestructiveMigration() a RoomDatabase.Builder para borrar la base de datos si falta la migración. b/63872392

  • Ahora los componentes de la arquitectura dependen de la Biblioteca de compatibilidades 26.0.0.

Correcciones de errores

  • Se corrigió la administración de @Relation anidada en @Embedded. b/63736065

  • Se corrigieron las migraciones de prueba para tablas con clave primaria incrementada automáticamente. b/63393618

  • Ahora las @Queries que ejecutan DELETE o las consultas UPDATE reciben los argumentos correctamente. b/63872538

  • Ahora los ViewModels se retienen cuando el fragmento del usuario está en la pila de actividades y el cambio de configuración sucede dos veces. b/38445801

1.0.0 Alpha 5: 18 de julio de 2017

Cambios en la API

Dependes del artefacto android.arch.persistence.room:rxjava2 para agregar compatibilidad con RxJava en Room.

Correcciones de errores

  • Se corrigieron las consultas @Delete sin ningún parámetro. b/63608092

  • Se corrigieron las verificaciones de tipo de Room para establecedores y captadores. b/63733651

1.0.0 Alpha 4: 11 de julio de 2017

Cambios en la API

  • Se agregó un método de conveniencia (runInTransaction()) a RoomDatabase.

  • Ahora los métodos @Insert, @Delete y @Update pueden mostrar parámetros de diferentes tipos de entidades. b/62682405

Correcciones de errores

  • Se corrigió el manejo de byte[] en los métodos @Dao. b/62460045

  • Ahora la verificación de migración en Room usa una comparación que distingue entre mayúsculas y minúsculas. b/62875382

  • Se corrigió la configuración de ProGuard para el artefacto Lifecycles. b/62113696

1.0.0 Alpha 3: 15 de junio de 2017

Cambios en la API

  • Ahora @OnLifecycleEvent solo es compatible con un parámetro. Este es un cambio para preparar la compatibilidad con Java 8 de manera que podamos migrar a interfaces con métodos predeterminados en el futuro. Con respecto a este cambio, solo los métodos anotados @OnLifecycleEvent(ON_ANY) pueden recibir un segundo parámetro de tipo Event (el primer parámetro es LifecycleOwner). Consulta la documentación de Lifecycle para obtener más información.

  • Las clases LifecycleActivity y LifecycleFragment se trasladan al artefacto android.arch.lifecycle:extensions.

  • MigrationTestHelper recibe la instancia Instrumentation en lugar del Context para poder leer el esquema a partir de los activos de prueba y crear la base de datos en el contexto de aplicación.

  • Las anotaciones @Insert, @Delete y @Update en los métodos @DAO ahora pueden tener Iterable como el tipo de parámetro. b/62259820

Correcciones de errores

  • Ya no se realizan varias llamadas a métodos anulados con eventos de ciclos de vida.

  • Ahora los parámetros IN numerosos se administran correctamente. b/62608681

  • Ahora las clases DAO abstractas tienen un constructor que recibe la instancia @Database. b/38488747

  • Ahora los DAO pueden tener una superclase o interfaz con parámetros de tipo. b/62103620

1.0.0 Alpha 2: 2 de junio de 2017

Cambios en la API

Correcciones de errores

  • Archivos de ProGuard para ciclos de vida (b/62113696)
  • Pérdida de datos con convertidores de tipo (b/62100716)
  • Se permitió que las consultas @Insert muestren Long[]

1.0.0 Alpha 1: 17 de mayo de 2017

MinSDK: 14

Recomendaciones generales

  • Aunque realizamos muchas pruebas antes del lanzamiento, actualmente los componentes de la arquitectura están en la versión Alfa. Si estás creando una app de producción, ten en cuenta que la API cambiará antes de la versión 1.0 y quizás no sea completamente estable. Si no te sientes capacitado para depurar problemas en las bibliotecas que usas, te recomendamos que primero pruebes los componentes de la arquitectura en proyectos paralelos.

  • No recomendamos que todos lleven a cabo la migración hoy mismo. Tenemos una guía para la migración lista para la versión 1.0 de los componentes de la arquitectura.

Limitaciones y problemas conocidos