15 de enero de 2019
WorkManager
Lanzamiento de WorkManager 1.0.0-beta02
. Esta versión contiene algunas correcciones de errores.
Correcciones de errores
- Se corrigió un caso extremo en el que el trabajo periódico podía ejecutarse más de una vez por intervalo en dispositivos con Android 6.0 (nivel de API 23) (b/121998363).
- Se corrigió una excepción
ConcurrentModificationException
en dispositivos con Android 5.1 (nivel de API 22) o versiones anteriores (b/121345393). - Se corrigió la ejecución errónea del trabajo que ocurría cuando no se cumplían las restricciones en dispositivos con Android 5.1 (nivel de API 22) o versiones anteriores (b/122578012).
- Se optimizó la administración de la finalización de trabajos para que sea más rápida en algunos casos extremos. (b/122358129)
- Se agregó un cambio para abordar posibles condiciones de carrera entre varias instancias de
LiveData
utilizadas por WorkManager. - Se decidió usar la dependencia
1.1.1
deRoom
en lugar de la1.1.1-rc01
; estas versiones son idénticas. (b/122578011)
19 de diciembre de 2018
WorkManager
Lanzamiento de WorkManager 1.0.0-beta01
. Esta versión no contiene cambios de API. Más adelante, se espera que WorkManager conserve la API estable hasta la próxima versión, a menos que surja un problema crítico. Esta versión contiene algunas correcciones de errores.
Correcciones de errores
- Las versiones secundarias canceladas previamente de trabajos principales completados ya no se ejecutarán (b/120811767).
- Se inicializaron de manera correcta las clases de registro (que se mostraban principalmente en la superficie durante las pruebas).
18 de diciembre de 2018
Navigation
Lanzamiento de Navigation 1.0.0-alpha09
. Esta versión contiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.
Decidimos no continuar desarrollando el artefacto android.arch.navigation:navigation-testing
. Si bien resultó ser útil para las pruebas internas de NavController
, recomendamos utilizar estrategias de prueba alternativas, como simular la instancia de NavController
, a fin de verificar que se estén realizando las llamadas correctas a navigate()
. Este enfoque se desarrolla de forma detallada en la charla de actividad única de la Android Dev Summit 2018, y seguiremos trabajando en la documentación adicional específica acerca de las pruebas con Navigation.
Nuevas funciones
- Los objetos
MenuItem
conmenuCategory="secondary"
ya no mostrarán la pila de actividades cuando se usen con los métodosNavigationUI
. b/120104424 AppBarConfiguration
ahora te permite establecer una instancia de resguardo deOnNavigateUpListener
a la que se puede llamar cuandonavController.navigateUp()
muestrafalse
. (b/79993862, b/120690961)
Cambios rotundos
- Cuando usas un objeto
<argument>
con unaargType="reference"
, Navigation ya no analiza la referencia, sino que proporciona el ID del recurso sin procesar. b/111736515 - Ahora se muestra
onNavDestinationSelected()
para el destino de inicio de tu gráfico de navegación de manera predeterminada, lo que hace que sea coherente con los métodossetup
. AgregamenuCategory="secondary"
a tuMenuItem
para evitar que se muestre la pila de actividades. aosp/852869 - Los métodos
fromBundle()
de las clases deArgs
generadas ahora toman un valor deBundle
no nulo en lugar de un valor deBundle
que puede ser nulo. aosp/845616
Correcciones de errores
- Ahora se analizan correctamente los argumentos desde los vínculos directos, como el
argType
correcto, en lugar de hacerlo siempre como strings. b/110273284 - Navigation ahora exporta de manera correcta sus recursos públicos. b/121059552
- Safe Args ahora es compatible con el complemento de Gradle para Android 3.4 Canary 4 y versiones posteriores. b/119662045
12 de diciembre de 2018
WorkManager
Lanzamiento de WorkManager 1.0.0-alpha13
. Esta versión contiene un cambio mínimo en la API que resultará útil para algunos usuarios de Kotlin.
Cambios en la API
- Se movió
androidx.work.Result
a una clase interna deListenableWorker
. De esta manera, se evitan los conflictos de restructuración con la clase de nivel principal de KotlinResult
. Esto es un cambio rotundo en materia de API (b/120564418).
Cambios rotundos en la API
- Se movió
androidx.work.Result
a una clase interna deListenableWorker
.
6 de diciembre de 2018
Paging
Lanzamiento de Paging 2.1.0-rc01
sin cambios desde 2.1.0-beta01
.
Navigation
Lanzamiento de Navigation 1.0.0-alpha08
. Esta versión contiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.
Nuevas funciones
- A partir de ahora, las etiquetas de destino que se usen con métodos de
NavigationUI
reemplazarán automáticamente las instancias de{argName}
en el objetoandroid:label
con el argumento correcto. b/80267266 - Ahora, Navigation depende de la biblioteca de compatibilidad 28.0.0 b/120293333
Cambios rotundos
- Se cambió el nombre de
OnNavigatedListener
porOnDestinationChangedListener
. b/118670572 - Ahora
OnDestinationChangedListener
también pasa elBundle
de los argumentos. aosp/837142 - Se quitaron los atributos
app:clearTask
yapp:launchDocument
, así como sus métodos asociados. Usaapp: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ónBuilder
y agrega la posibilidad de configurar cualquier marca deIntent.FLAG_ACTIVITY_
. aosp/828140 - Se cambió el nombre de
NavController.onHandleDeepLink
porhandleDeepLink
. aosp/836063 - Muchas clases y métodos no destinados para subclases, como
NavOptions
,NavInflater
,NavDeepLinkBuilder
yAppBarConfiguration
, quedaron comofinal
. aosp/835681 - Se quitó el método
NavHostFragment.setGraph()
que se dio de baja. aosp/835684 - Se quitó el método
NavigationUI.navigateUp(DrawerLayout, NavController)
que se dio de baja. aosp/835684 - La creación de fragmentos se trasladó a
FragmentNavigator
, y ahora es más fácil delegar la creación de fragmentos aFragmentFactory
. b/119054429 - El constructor de
NavGraphNavigator
ya no usa unContext
. aosp/835340 - Ahora, NavigatorProvider es una clase en lugar de una interfaz. No cambió la funcionalidad del
NavigatorProvider
que muestragetNavigatorProvider()
. aosp/830660 - Se quitó
NavDestination.navigate()
. En su lugar, llama anavigate()
en elNavigator
. aosp/830663 - Se realizó una refactorización importante de
Navigator
: se eliminó la necesidad de contar conOnNavigatorNavigatedListener
y, en su lugar,navigate
muestra elNavDestination
al que se navegó. - Las instancias de
Navigator
ya no pueden enviar eventos emergentes alNavController
. Considera usar unaOnBackPressedCallback
para interceptar las instancias en las que se presione el botón Atrás y llamar anavController.popBackStack()
. aosp/833716.
Correcciones de errores
popUpTo
ahora funciona de manera coherente cuando el destino es un elemento<navigation>
. b/116831650- Se corrigieron varios errores que generaban una
IllegalArgumentException
al usar gráficos anidados. (b/118713731, b/113611083, b/113346925, b/113305559). - Ahora el atributo
dataPattern
de los destinos<activity>
propagará los argumentos de argumentos que no son de string mediante una llamada atoString()
. b/120161365
Safe Args
- Safe Args admite los objetos con serialización, 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 arreglos 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 corresponde. 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 en la API 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
, introduceRxWorker
. Este es unListenableWorker
que espera unaSingle<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ó aResult
. Ahora,Result
es una "clase sellada" con tres implementaciones concretas, que puedes obtener medianteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) yResult.retry()
. El resultado deListenableFuture
ahora esResult
, en lugar dePayload
. La claseWorker
no tiene métodos de captador y establecedor para el resultadoData
. Este es un cambio rotundo.- Se agregaron
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
yConstraints.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()
yListenableFuture.await()
. - Se cambió el nombre de
Operation.getException()
porOperation.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 quitó el resto de los métodos de varargs en
WorkManager
,WorkContinuation
yOneTimeWorkRequest
para optimizar la API. Para solucionar los problemas de compilación, puedes unir tus varargs existentes conArrays.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étodoscombine
existentes son más fáciles de comprender. Este es un cambio rotundo.
Correcciones de errores
- Ahora las implementaciones previas a Marshmallow son más confiables cuando se recuperan del cierre de proceso de una tarea que ya está en ejecución.
- Se realiza el seguimiento de
LiveData
mediante WorkManager que se observa a través deobserveForever
. Es un backport de una corrección de 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 sucedía en un subproceso en segundo plano, donde no se lo podía administrar correctamente. - Mayor distinción entre los trabajos detenidos y cancelados. El elemento
getWorkInfoById()
mostraráWorkInfo
con elCANCELLED
State
duranteListenableWorker.onStopped()
. - Los
null
Result
se considerarán errores enListenableWorker
. 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ó aResult
. Ahora,Result
es una "clase sellada" con tres implementaciones concretas, que puedes obtener medianteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) yResult.retry()
. El resultado deListenableFuture
ahora esResult
, en lugar dePayload
. La claseWorker
no tiene métodos de captador y establecedor para el resultadoData
.- Se agregaron los métodos de extensión de Kotlin
Operation.await()
yListenableFuture.await()
. - Se cambió el nombre de
Operation.getException()
porOperation.getThrowable()
. - La clase
ContentUriTriggers
y los métodos que hacen referencia a ella ya no están disponibles para uso público. - Se quitó el resto de los métodos de varargs en
WorkManager
,WorkContinuation
yOneTimeWorkRequest
para optimizar la API. Para solucionar los problemas de compilación, puedes unir tus varargs existentes conArrays.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étodoscombine
existentes son más fáciles de comprender.
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 asignadores de tokens integrados todavía están definidos enFtsOptions
como constantes de 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 admitenListenableFuture
como tipo de datos que se muestra. b/119418331
Correcciones de errores
- Se solucionó un error por el que Room intentaba incorrectamente encontrar un constructor con columnas en la propiedad
ignoredColumns
de@Entity
(b/119830714). - Se solucionó un error por 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 por el que Room rechazaba varias implementaciones de
Collection
como argumentos de una expresiónIN
. b/119884035 - Se corrigió un error en el que los LiveData mostrados por Room recibían elementos no utilizados recopilados cuando se observaban 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 contención 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
- El elemento
work-runtime-ktx
introduce un nuevoCoroutineWorker
. - El nombre de
WorkStatus
se cambió aWorkInfo
. Todas las variantes correspondientes del métodogetStatus
cambiaron de nombre por las variantesgetWorkInfo
correspondientes. Este es un cambio rotundo. ListenableWorker.onStopped()
ya no acepta un argumento booleano que representa siWorkRequest
se canceló.WorkManager
ya no hace esta distinción. Este es un cambio rotundo.- El nombre del paquete
androidx.work.test
cambió porandroidx.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()
yWorkerParameters.getTriggeredContentAuthorities()
mostraban arreglos. Ahora estos métodos muestran Collections. Este es un cambio rotundo. - El nombre de
ListenableWorker.onStartWork()
cambió porListenableWorker.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()
yConfiguration.getMinJobSchedulerID()
se cambiaron aConfiguration.getMinJobSchedulerId()
yConfiguration.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 elementosOneTimeWorkRequest
únicos sin tener que crearWorkContinuation
. - Ahora todas las variantes de los métodos
enqueue
ycancel
enWorkManager
muestran un nuevo tipo deOperation
. Este es un cambio rotundo. - Todas las variantes de
enqueue
ya no aceptan varargs paraWorkRequest
. Este es un cambio rotundo. Usa Collections en su lugar. Puedes usarArrays.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
deWorkManager
que se repitan más de una vez por proceso darán como resultadoIllegalStateException
. Este es un cambio rotundo.
Correcciones de errores
- Ahora, los elementos
WorkRequest.Builder
en el artefactowork-runtime-ktx
usanListenableWorker
. Correcciones b/117666259. - Asegúrate 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
se cambió aWorkInfo
. Todas las variantes correspondientes del métodogetStatus
cambiaron de nombre por las variantesgetWorkInfo
correspondientes. ListenableWorker.onStopped()
ya no acepta un argumento booleano que indique si se cancelóWorkRequest
.WorkManager
ya no hace esta distinción.- El nombre del paquete
androidx.work.test
cambió porandroidx.work.testing
. - Los establecedores en
Constraints
ya no forman parte de la API pública. - Anteriormente,
WorkerParameters.getTriggeredContentUris()
yWorkerParameters.getTriggeredContentAuthorities()
mostraban arreglos. Ahora estos métodos muestran Collections. - El nombre de
ListenableWorker.onStartWork()
cambió porListenableWorker.startWork()
. - El constructor de
WorkStatus
ya no forma parte de la API pública. - Los nombres de
Configuration.getMaxJobSchedulerID()
yConfiguration.getMinJobSchedulerID()
se cambiaron aConfiguration.getMinJobSchedulerId()
yConfiguration.getMaxJobSchedulerId()
, respectivamente. - Ahora, todas las variantes de los métodos
enqueue
ycancel
enWorkManager
muestran un nuevo tipo deOperation
. - Todas las variantes de
enqueue
ya no aceptan varargs paraWorkRequest
. - Ahora, los intentos de
initialize
deWorkManager
que se repitan más de una vez por proceso darán como resultadoIllegalStateException
.
1 de noviembre de 2018
Paging
Lanzamiento de Paging 2.1.0-beta01
sin cambios desde 2.1.0-alpha01
.
30 de octubre de 2018
Room
Lanzamiento de Room 2.1.0-alpha02
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 por el que Room realizaba operaciones de E/S en el disco en el subproceso principal al suscribirse y desechar un tipo de datos que se muestra 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
Navigation
Lanzamiento de Navigation 1.0.0-alpha07
con correcciones de errores y cambios en la API.
Nuevas funciones
- Una nueva clase de AppBarConfiguration te permite personalizar los destinos considerados de primer nivel. Consulta la documentación actualizada para obtener más información. b/117333663
- Ahora puedes transferir argumentos al destino de inicio de tu gráfico. b/110300470
- Los vínculos directos ahora admiten esquemas personalizados con puntos, guiones y signos más. b/112806402
Cambios rotundos
- Se integró el módulo
navigation-testing-ktx
anavigation-testing artifact
y ya no se 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. - Ya no se admiten los gráficos de navegación registrados del manifiesto de metadatos. b/118355937
- Las acciones ya no se pueden adjuntar a los destinos de <activity>. aosp/785539
Correcciones de errores
- Los vínculos directos ahora analizan correctamente los parámetros de búsqueda. b/110057514
- Los destinos de Activity ahora aplican correctamente todas las animaciones de entrada y salida. b/117145284
- Se corrigió la falla que ocurre después de los cambios de configuración cuando se usan atributos Navigator personalizados. b/110763345
Safe Args
- Los argumentos seguros ahora tienen una dependencia fija en el complemento de Gradle para Android 3.2.1. b/113167627
- Ahora se pueden generar Directions para las clases internas. b/117407555
- Se corrigió un error con la generación de Directions para un gráfico de <include>. b/116542123
12 de octubre de 2018
Paging
Paging 2.1.0-alpha01
tiene 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 el número de elementos cargados en la memoria. - Se agregó
androidx.paging.Config()
como una alternativa de Kotlin paraPagedList.Config.Builder
. - Se agregó
androidx.paging.PagedList()
como una alternativa de Kotlin paraPagedList.Builder
. - Se agregó
DataSourceFactory.toLiveData()
como una alternativa de Kotlin paraLivePagedListBuilder
. - Se agregaron
DataSourceFactory.toObservable()
ytoFlowable()
como alternativas de Kotlin paraRxPagedListBuilder
. - Se agregó
AsyncPagedListDiffer.addPagedListListener()
para escuchar cambios de PagedList. (b/111698609) - Se agregó la variante
PagedListAdapter.onCurrentListChanged()
que pasa la lista anterior y la nueva. La variante anterior 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. De esta manera, puedes 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 que se muestra es siempre 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()
muestraIndexOutOfBoundsException
cuando el índice no es válido. Anteriormente, fallaba sin proporcionar una excepción clara. - Se corrigió un error por el que un tamaño de carga inicial extremadamente pequeño junto con datos sin modificar hacían 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 constructorWorker
predeterminado. Esto es un cambio rotundo en materia de API. - El nombre de
NonBlockingWorker
se cambió porListenableWorker
, que ahora es una clase pública visible lista para usar.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, actualizaListenableFuture
según corresponda. Las implementaciones de referencia deListenableFuture
se proporcionan en el paqueteFutures
enalpha02
(consulta la secciónWorkManager
a continuación).Worker
extiendeListenableWorker
y sigue funcionando como antes, con un métodoResult doWork()
abstracto.- Algunos métodos y miembros cambiaron de
Worker
aListenableWorker
. - Pronto 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 concretaDefaultWorkerFactory
se fusionaron en una clase abstracta llamadaWorkerFactory
. La implementación garantiza que el comportamiento predeterminado basado en reflexiones se invocará como un último esfuerzo para cualquier instanciaWorkerFactory
creada por el usuario. Este es un cambio rotundo. - Se quitaron
WorkManager.synchronous()
yWorkContinuation.synchronous()
, y todos los métodos relacionados. Se agregóListenableFuture<Void>
como tipo de resultado de métodos en la API. Esto es un cambio rotundo en materia de API.- Ahora puedes usar
ListenableFuture
para obtener y observar de manera asíncrona. Por ejemplo, se usóWorkManager.enqueue()
para mostrarvoid
y ahora muestraListenableFuture<Void>
. Puedes llamar aListenableFuture.addListener(Runnable, Executor)
oListenableFuture.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 no, solo indicará que se completó. Necesitarás métodos WorkManager para averiguar esta información. - Omitimos 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 resultante de ella?). Estos detalles se encuentran dentro del contrato deFuture
. - Para mantener la paridad con los métodos
getStatus*
síncronos, proporcionamos variantesListenableFuture
y cambiamos el nombre de los métodos existentes que mostrabanLiveData
para que "LiveData" forme parte del nombre de manera explícita (por ejemplo,getStatusesByIdLiveData(UUID)
). Esto es un cambio rotundo en materia de API.
- Ahora puedes usar
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, borraexclude '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 excepción
NullPointerException
en una condición de carrera en la que el trabajo fueREPLACE
(b/116253486 y b/116677275). - Ahora,
WorkContinuation.combine()
acepta un elementoWorkContinuation
o más, 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 constructorWorker
predeterminado. - La interfaz
WorkerFactory
y la implementación concretaDefaultWorkerFactory
se fusionaron en una clase abstracta llamadaWorkerFactory
. - Se quitaron
WorkManager.synchronous()
yWorkContinuation.synchronous()
. - Los métodos
WorkManager.getStatus*()
ahora muestranListenableFuture
. El elementoWorkManager.getStatus*LiveData()
muestraLiveData
.
Futures
Lanzamiento de Futures 1.0.0-alpha02
.
Cambios en la API
- Ahora los desarrolladores pueden usar
ResolvableFuture
yAbstractResolvableFuture
como implementaciones concretas livianas deListenableFuture
.
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 mapeo de búsqueda en el 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 adicional con tipos de datos que se muestran Rx: Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
ahora admiten mostrar los tipos de datos RxCompletable
,Single<T>
yMaybe<T>
. b/63317956 - Tipos con
@Relation
que no cambian: Antes, Room requería que los campos con anotaciones@Relation
pudieran configurarse, pero ahora pueden ser parámetros de constructor. enableMultiInstanceInvalidation
: Es una API nueva enRoomDatabase.Builder
que sirve 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/62334005fallbackToDestructiveMigrationOnDowngrade
: Es una API nueva enRoomDatabase.Builder
que sirve para recrear automáticamente la base de datos si se cambia a una versión inferior. b/110416954ignoredColumns
: Es una API nueva en la anotación@Entity
que se puede usar para crear una lista de campos ignorados según su nombre. Sirve para ignorar campos heredados en una entidad (b/63522075).
Cambios de comportamiento/API
- Ahora
mCallback
ymDatabase
enRoomDatabase
son@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á de forma correcta 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 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
Navigation
Lanzamiento de Navigation 1.0.0-alpha06
con correcciones de errores y cambios en la API.
Nuevas funciones
- Ahora se admiten las transiciones de elementos compartidos para los destinos de fragmentos y actividades b/79665225. Para obtener más información, consulta Cómo implementar navegaciones con el componente de arquitectura de Navigation.
- Ahora, si seleccionas un elemento en
NavigationView
, se cerrará cualquier hoja inferior con contenido. b/112158843
Cambios en la API
- Cambio rotundo: el método
navigate()
de Navigator ahora toma un parámetroNavigator.Extras
. - Ahora el método
getGraph()
de NavController esNonNull
. 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 correcciones 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:
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
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)
alWorker
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 la eliminación de duplicados 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 unaWorkerFactory
como parte deWorkManager.Configuration
. La fábrica de resguardo esDefaultWorkerFactory
, lo que coincide con el comportamiento de versiones anteriores de WorkManager.- Ahora, los constructores predeterminados para
Worker
yNonBlockingWorker
ahora identificados como obsoletos. Usa el nuevo constructor (Worker(Context, WorkerParameters)
) y llama asuper(Context, WorkerParameters)
. Las versiones futuras de WorkManager quitarán el constructor predeterminado.
- Ahora, los constructores predeterminados para
- Comenzamos a usar el nuevo artefacto
ListenableFuture
de manera interna (sin dependencias de Guava). Implementaremos ListenableFutures a la API en las próximas versiones. Este cambio permitirá que se muestreNonBlockingWorker
eventualmente. - Agrega la capacidad de activar tareas programadas en
TestDriver
medianteTestDriver.setInitialDelayMet(UUID)
yTestDriver.setPeriodDelayMet(UUID)
. (b/113360060).
Cambios rotundos
- Los constructores predeterminados
Worker
yNonBlockingWorker
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 correcciones 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áximo de
Configuration.setMaxSchedulerLimit(int)
a 50 para tener en cuenta la latencia al completar el procesamiento deJobScheduler
. b/112817355
16 de agosto de 2018
WorkManager
Lanzamiento de WorkManager 1.0.0-alpha07
con correcciones de errores, actualizaciones de infraestructura y cambios 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 trabajos de
JobScheduler
. b/111569265 - Se corrigió una
ConcurrentModificationException
enConstraintTracker
. b/112272753 - Se cambiaron las anotaciones de tipo de datos que se muestra de
Data.getBooleanArray(String)
yData.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 totalmente compatible para las soluciones de subprocesos personalizados. - Se cambiaron las anotaciones de tipo de datos que se muestra de
Data.getBooleanArray(String)
yData.getIntArray(String)
por@Nullable
, en lugar de@NonNull
. b/112275229 - Extensiones de Kotlin:
Map.toWorkData()
dejó de estar disponible y se agregó un elementoworkDataOf(vararg Pair<String, Any?>)
de nivel superior para que exista mayor coherencia con las API existentes.
10 de agosto de 2018
Navigation
Lanzamiento de Navigation 1.0.0-alpha05
con correcciones 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 correcciones 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 objetos
WorkRequest
únicos durante el uso deWorkRequest.Builder#build()
. b/111408337 - Se habilitó el uso de
RescheduleReceiver
solo cuando hay objetosWorkRequest
que lo necesitan. b/111765853
24 julio de 2018
WorkManager
Lanzamiento de WorkManager 1.0.0-alpha05
con cambios de registro y correcciones de errores importantes.
Cambios en la API
- Ahora
WorkManager.getInstance()
tiene anotaciones con@NonNull
, en lugar de@Nullable
. En cambio, si el singleton no se inicializó correctamente en los casos de inicialización manual, el método arrojará unaIllegalStateException
. 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 forma predeterminada, WorkManager registraLog.INFO
y versiones superiores. - Se cambió la firma de
Data.getString()
de manera que ya no toma un valor predeterminado (esnull
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. Se incluye al constructorConstraints
,Data.toByteArray()
yData.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 objetos
PeriodicWorkRequest
al usarJobScheduler
. b/110798652 - Se corrigió un problema con objetos
PeriodicWorkRequest
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 objetos
BroadcastReceiver
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 laWorkRequest
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 (esnull
de manera implícita). - Se identificaron como
@hide
algunos métodos que solo se necesitan para uso interno. Se incluye al constructorConstraints
,Data.toByteArray()
yData.fromByteArray(byte[])
.
19 de julio de 2018
Navigation
Navigation 1.0.0-alpha04
y los complementos Safe Args Gradle asociados incluyen varios cambios de API, cambios en los comportamientos y correcciones 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ó porapp: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
12 de julio de 2018
Navigation
Navigation 1.0.0-alpha03
y los complementos Safe Args Gradle asociados incluyen varios cambios de API, cambios en los comportamientos y correcciones 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 el uso de mayúsculas mediales en los nombres de métodos NavDirections correspondientes.
- P. ej.,
DemoController.index
se convertirá ensetDemoControllerIndex
. b/79995048 - P. ej.,
action_show_settings
se convertirá enactionShowSettings
. b/79642240
- P. ej.,
- Cambio rotundo: ahora los argumentos se consideran no nulos de manera predeterminada. Para permitir valores nulos en argumentos parcelables y de strings, agrega
app:nullable="true"
. b/79642307 - Ahora puedes usar
app:type="long"
con defaultValues en forma de "123L". b/79563966 - Ahora se admiten los argumentos parcelables mediante el uso de un nombre de clase completamente calificado para
app:type
. El único valor predeterminado permitido es"@null"
. b/79563966 - Ahora las clases de Args implementan
equals()
yhashCode()
. b/79642246 - Ahora se puede aplicar el complemento Safe Args 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 solucionó el problema por el que todos los valores
app:defaultValue
se pasaban como strings. b/110710788 - Ahora el aapt2 empaquetado con el complemento de Gradle para Android 3.2 Beta 01 agrega reglas de mantenimiento para cada atributo
android:name
en los archivos en formato XML de Navigation. 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 personalizar dónde se ejecutan las consultas. - Se agregó compatibilidad con RxJava2
Observable
. - 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 solucionaron fallas en las quePagedListAdapter
yAsyncPagedListDiffer
no identificaban eventos de movimiento. b/110711937
26 de junio de 2018
Paging
Lanzamiento de Paging 1.0.1
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
yAsyncPagedListDiffer
no identificaban eventos de movimiento. b/110711937
WorkManager
Lanzamiento de WorkManager 1.0.0-alpha04
.
Correcciones de errores
Ahora los elementos
PeriodicWorkRequest
se reprogramaron correctamente para el uso de la implementación basada enAlarmManager
.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/109572353Se corrigieron las advertencias del compilador Kotlin durante el uso de la dependencia
work-runtime-ktx
.Ahora, WorkManager usa
Room
versión1.1.1-rc1
.
Cambios en la API
Se agregó
getStatusesSync()
, la versión síncrona deWorkContinuation.getStatuses()
.Worker
permite distinguir entre una cancelación iniciada por el usuario y una detención temporaria solicitada por el SO. El elementoWorker.isStopped()
muestratrue
si se solicitó algún tipo de detención.Worker.isCancelled()
muestratrue
cuando el trabajo se canceló de manera explícita. b/79632247Se agregó compatibilidad con JobParameters#getNetwork() en la API 28. Se expone mediante
Worker.getNetwork()
.Se agregó
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
para que apliques de manera forzosa la cantidad de trabajos que se envían aJobScheduler
oAlarmManager
. Esto ayuda a evitar queWorkManager
tome todos los espacios deJobScheduler
disponibles.Se agregó
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, que ayuda a definir un rango de ID de tarea deJobScheduler
para que useWorkManager
(b/79996760).Worker.getRunAttemptCount()
muestra el recuento de ejecución actual de un objetoWorker
determinado. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
te permite poner en cola un elementoPeriodicWorkRequest
único. b/79600647WorkManager.cancelAllWork()
cancela todos los elementosWorker
. Las bibliotecas que dependen deWorkManager
pueden consultar cuándo se llamó a este método por última vez. Para ello, pueden utilizarWorkManager.getLastCancelAllTimeMillis()
para una limpieza adicional del estado interno.Se agregó
WorkManager.pruneWork()
para quitar los trabajos completados de la base de datos interna. b/79950952, b/109710758.
Cambios en el comportamiento
- Se agregó una etiqueta implícita para todas las
WorkRequest
, que es el nombre de clase completamente calificado para el elementoWorker
. Esto permite quitar objetosWorkRequest
sintag
o cuando elid
no está disponible (b/109572351).
Cambios rotundos
Se cambió el nombre de
Worker.WorkerResult
porWorker.Result
.Worker.onStopped
ahora tiene un parámetroisCancelled
adicional configurado entrue
cuando el elementoWorker
se cancela de manera explícita.
7 de junio de 2018
Lanzamiento de Navigation 1.0.0-alpha02
.
Navigation
Cambios en el comportamiento
Ahora
FragmentNavigator
usasetReorderingAllowed(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ó un error
IllegalStateException
que se generaba cuando se llamaba a la navegación desde métodos de ciclos de vida de Fragment. b/79632233Ahora la navegación depende de la Biblioteca de compatibilidad 27.1.1 para corregir el parpadeo cuando se usan animaciones. b/80160903
Se corrigió un error
IllegalArgumentException
que se generaba cuando se usaba defaultNavHost="true" como fragmento secundario. b/79656847Se corrigió un error
StackOverflowError
que se generaba cuando se usaba NavDeepLinkBuilder. b/109653065Se corrigió un error
IllegalArgumentException
que se generaba cuando se navegaba hacia atrás en un gráfico anidado. b/80453447Se corrigió un error relacionado con la superposición de Fragment que se generaba cuando se usaba
launchSingleTop
. b/79407969Ahora 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
Se dio de baja el atributo
clearTask
para acciones y la API asociada enNavOptions
. b/80338878Se dio de baja el atributo
launchDocument
para acciones y la API asociada enNavOptions
. b/109806636
24 de mayo de 2018
Lanzamiento de WorkManager 1.0.0-alpha02
.
WorkManager
Correcciones de errores
Se corrigió una
NullPointerException
enState.isFinished()
. b/79550068Se corrigió un problema que ocasionaba que los objetos
Worker
se reprogramaran enApplication.onCreate()
. b/79660657Se 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 con elementos
Worker
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 objetos
float
enData
. b/79443878Ahora,
Data.Builder.putAll()
muestra una instancia deBuilder
. b/79699162Más Javadoc y correcciones en la documentación. b/79691663
Cambios en la API
Los elementos
Worker
pueden reaccionar a una detención. Se puede usarWorker.isStopped()
para verificar si se detuvo un elementoWorker
. Se puede usarWorker.onStopped()
para realizar operaciones de limpieza livianas.La API
Worker.getTags()
muestra unSet
de etiquetas asociadas con el elementoWorker
.Se agregaron sobrecargas de
javax.time.Duration
para API que usan una combinación de duración yTimeUnit
. Esto lo supervisa@RequiresApi(26)
.Las extensiones de
WorkManager
se trasladaron del paqueteandroidx.work.ktx
al paqueteandroidx.work
. Las extensiones anteriores dejaron de estar disponibles y se quitarán en una versión futura.Configuration.withExecutor()
ya no está disponible. UsaConfiguration.setExecutor()
en su lugar.
16 de mayo de 2018
Lanzamiento de Paging RxJava2 1.0.0-rc1
y Room 1.1.1-rc1
. Recomendamos utilizar Room 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 framework para compilar la navegación desde la app. Esta versión 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. Esta versión 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 características nuevas ni problemas conocidos previstos para el lanzamiento de Paging 1.0.0
. Actualiza tus proyectos 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 alfa de 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 a RxJava2 respecto de LivePagedListBuilder
, capaz de crear objetos Observable
y Flowable
, y de tomar objetos Scheduler
en lugar de Executor
:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Paging
Nuevas funciones
- Se agrega
RxPagedListBuilder
mediante el nuevo artefactoandroid.arch.paging:rxjava2
.
Cambios en la API
Cambios de API para aclarar el rol de los ejecutores en los compiladores.
El nombre de
setBackgroundThreadExecutor()
cambió asetFetchExecutor()
(enPagedList.Builder
yLivePagedListBuilder
).El nombre de
setMainThreadExecutor()
cambió asetNotifyExecutor()
(enPagedList.Builder
).
Se corrigió el miembro
PagedList.mCallbacks
para que sea privado.
Correcciones de errores
LivePagedListBuilder
activa una carga inicial dePagedList
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 implementarDataSource.map
, además de la carga dePositionalDataSource
inhabilitada para marcadores de posición). b/77237534
Room
Correcciones de errores
Se corrigió un error crítico en las implementaciones
Single
yMaybe
de Room Rx, en el que se reciclaba la búsqueda antes de tiempo, lo que ocasionaba problemas si agregabas más de un observador a las instancias deSingle
oMaybe
que se habían mostrado. b/76031240RoomDatabase.clearAllTables no ejecutará
VACUUM
en la base de datos si se llama 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
- En función de los comentarios de revisión de la API,
@RawQuery
ya no acepta que se pase unaString
como parámetro de búsqueda. Debes usar SupportSQLiteQuery. (Consulta SimpleSQLiteQuery para crear fácilmente una instancia de SupportSQLiteQuery con compatibilidad con argumentos). - El método fallbackToDestructiveMigrationFrom de RoomDatabase.Builder ahora acepta
vararg int
en lugar devararg Integer
.
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 de la propiedadobservedEntities
, siempre y cuando tenga referencias a una o más entidades a través de sus camposEmbedded
oRelation
. b/74041772Paging: 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: se movió android.arch.core.util.Function
de arch:runtime
a arch:common
. De esta manera, es posible 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
Lanzamiento de Paging 1.0.0-alpha7
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 objetosDataSource.LoadCallback
son abstractos. De esta manera, se puede envolver unDataSource
o directamente probar unDataSource
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 unaDataSource
.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 elLivePagedListProvider
. - 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 elementos Builder 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
paraPositionalDataSource
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
yremoveObserver
de InvalidationTracker son síncronos y se deben llamar en un subproceso 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/63807999Ahora
SupportSQLiteQuery
tiene un métodogetArgCount()
que muestra la cantidad de parámetros de búsqueda. b/67038952
Correcciones de errores
Ahora
@RawQuery
es compatible con las consultas de Paging. b/72600425Ahora Room nombra correctamente las clases
Dao
generadas para evitar conflictos de nombres cuando dos o más interfaces deDao
son clases internas en el mismo paquete y tienen el mismo nombre. b/73536380Los tipos de campo genéricos en objetos
Pojo
se analizan correctamente como miembros de la clase extendida. b/73534868Los parámetros de búsqueda en las interfaces
Dao
que se heredaron de artefactos de dependencia ahora se analizan correctamente. b/68118746Las búsquedas generadas para
@Relation
ahora 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 cambiaron los nombres de las clases dentro de paging-runtime:
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
ycom.android.support:recyclerview-v7:27.1.0
.- Se debe realizar de manera simultánea, ya que ListAdapter pasó de Paging a RecyclerView.
- Actualiza las referencias de
ListAdapterHelper
aAsyncListDiffer
.- Se quitaron
getItem(index)
/getItemCount()
y se reemplazaron por el patrón de llamar agetCurrentList().getItem(index)
ygetCurrentList().size()
, que son más explícitos.
- Se quitaron
- Actualiza las referencias de
ListAdapterConfig
aAsyncDifferConfig
- Actualiza las referencias de
DiffCallback
aDiffUtil.IttemCallback
- Actualiza las referencias de
PagedListAdapterHelper
aAsyncPagedListDiffer
. - Actualiza las referencias de
setList()
asubmitList()
.- 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étodosetJournalMode()
en elRoomDatabase.Builder
. b/67757002Compatibilidad con Guava: ahora Room permite mostrar Guava
Optional<T>
oListenableFuture<T>
en búsquedasDAO
. Para usarListenableFuture<T>
, debes importar el artefactoguava
de Room (android.arch.persistence.room:guava:1.1.0-alpha2
).Ahora Room permite mostrar
java.util.Optional<T>
de consultasDAO
.Los métodos de interfaz con implementaciones predeterminadas ahora están admitidos en métodos
@Transaction
en clasesDAO
. Funciona paraJava 8
yKotlin
. b/72416735
Correcciones de errores
Los constructores con
@Relation
no causarán un error de compilación si hay otro constructor que se pueda utilizar. b/72884434Los 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/72366965Ahora Room usa las anotaciones
@Metadata
de Kotlin para leer la estructura de clase durante el proceso de anotaciones. 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/67181813Se solucionó un problema 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 procesa correctamente los campos
boolean?
persistentes en las clases de 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
yLifecycleFragment
, ya que dejaron de estar disponibles. En su lugar, usaFragmentActivity
oAppCompatActivity
, o bien asegúrate de queFragment
sea compatible. - Se agregaron anotaciones de
@NonNull
aViewModelProviders
yViewModelStores
. - El constructor
ViewModelProviders
dejó de estar disponible. Usa sus métodos estáticos directamente. ViewModelProviders.DefaultFactory
dejó de estar disponible. UsaViewModelProvider.AndroidViewModelFactory
.- Se agregó el método
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
estático para recuperar un valorFactory
estático apto para la creación de instanciasViewModel
yAndroidViewModel
.
Room 1.1.0-alpha1
Nuevas funciones
RawQuery
: esta API nueva permite que los métodos@Dao
reciban la instrucción SQL como un parámetro de consulta. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: Esta API nueva enRoomDatabase.Builder
permite controlar de manera más detallada desde qué versiones de esquema iniciales se permiten las migraciones destructivas (en comparación con fallbackToDestructiveMigration). b/64989640- Ahora Room solo es compatible con las APIs 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 utilizar paginación dealpha-4
o versiones posteriores y cambiar deLivePagedListProvider
aLivePagedListBuilder
, 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 adiciones y cambios 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.- Incluye 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
aPositionalDataSource
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 deKeyedDataSource
porItemKeyedDataSource
para que la diferencia sea más clara.LivePagedListBuilder
yDataSource.Factory
reemplazan aLivePagedListProvider
. El constructor brinda la misma capacidad con más personalización y valores predeterminados más sencillos. La fábrica permite que el código de generación deDataSource
permanezca independiente deLiveData
.Se agregó
PagedList.BoundaryCallback
para el caso de uso de base de datos + red.El constructor
PagedList.Builder
, que ahora es más similar aLivePagedListBuilder
, tomaDataSource
+PagedList.Config
y permite el operador Diamante en lenguaje Java o en los tipos inferidos en Kotlin.Se agregó
PagedList.getConfig()
, y ahoraPagedList.Config
tiene propiedades de miembro públicas.KeyedDataSource.loadBefore()
ya no espera que se reviertan los resultados.Se agregó
PagedListAdapter.onCurrentListChanged()
para detectar 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
- Ahora
LiveDataReactiveStreams
implementa correctamente la especificación de Reactive Streams. b/67999342
Versión potencial: 18 de octubre de 2017
Ahora todos los artefactos principales (excepto Paging) son 1.0.0-rc1
.
No tenemos más funciones nuevas ni problemas conocidos programados para la versión 1.0.0
. Actualiza tus proyectos 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
- En esta versión,
Lifecycle.Event#ON_STOP
ahora se despacha cuando se llama aonSaveInstanceState
(anteriormente solo se marcaba comoCREATED
sin despacharON_STOP
). Puedes obtener más información en la documentación de Lifecycles.
Correcciones de errores
Room:
- Room ahora 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 con@Transaction
. Consulta los documentos de referencia en@Transaction
para obtener más información. b/65112315 - Se quitó la clase
StringUtil
de Room de la API pública (nunca estuvo previsto que fuese una API pública).
- Room ahora depende del artefacto xerial más reciente que corrige los problemas de
Lifecycles:
LiveData
funciona correctamente cuando el objeto Activity está cubierto parcialmente en los niveles de API inferiores a 24. b/65665621Ahora 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/63474615Lifecycle ahora retiene un
WeakReference
a su LifecycleOwner para evitar que se filtre el LifecycleOwner si Lifecycle se conserva en la memoria por más tiempo. de lo habitual (esto es solo una precaución; de todas formas, debes tener cuidado de no filtrar elLifecycle
).
9 de octubre de 2017
Lanzamiento de 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 el objetoLiveData
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 procesa correctamente los observadores cuando anulan la suscripción durante la creación de la suscripción. b/66337741
FullLifecycleObserver
para el artefacto de lenguaje Java 8 ahora está disponible en el árbol de dependencias. b/66525578En 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>(...);}
- Ahora
Room:
- Ahora Room imprime un error en el tiempo de 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 forma predeterminada. b/67353427
- Las claves primarias de una columna individual pueden ser
Nullable
si es un objetoInteger
oLong
. b/67086876 - El seguimiento de invalidación procesa 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 tiempo de compilación (caracteres no válidos:
`
,"
). b/64749111
- Ahora Room imprime un error en el tiempo de compilación cuando el Pojo que se muestra en un método
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 nueva biblioteca de Paging, que es alpha 2
).
No tenemos planificado ningún cambio adicional en la API. Podría haber cambios no planificados, 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 compatibilidad26.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
. - Paging ahora está
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 Lifecycles tiene 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óduloandroid.arch.lifecycle:common:1.0.1
para usar el nuevo artefactocommon-java8
. Se solucionará este problema enbeta2
.
- Debido a un error en
Cambios de empaquetado
- Se movió
android.arch.persistence.room.db
aandroid.arch.persistence.db
. - Se trasladó
android.arch.persistence.room.db-impl
y se cambió el nombre aandroid.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:
- Cambios en la API en la configuración de la base de datos. b/65349673 b/65499876
Paging:
- Se mejoró la documentación de Paging con más ejemplos y anotaciones de subprocesos.
Correcciones de errores
- Room:
- Las strings Kotlin de varias líneas en los métodos
@Query
se procesan correctamente. b/65809374
- Las strings Kotlin de varias líneas en los métodos
- 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 importante lanzamiento en el que los artefactos principales de Lifecycle (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
- Las siguientes clases dejaron de estar disponibles y se quitarán en una versión futura:
Correcciones de errores
Ahora las clases generadas tienen anotaciones 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 búsquedas
WITH
de SQLite son compatibles con [LiveData]. [ref-LiveData]. b/62510164Se 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 objetos 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 el comportamiento
- Se agregó 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étodofallbackToDestructiveMigration()
en el compilador. b/62007004
Cambios en la API
- Ahora SupportSQLiteProgram extiende AutoCloseable. b/63131997
1.0.0 Alpha 7: 26 de julio de 2017
Correcciones de errores
Se corrigió un error crítico en el método LifecycleRegistry
removeObserver
, que rompió una nueva adición de LifecycleObserver.Se corrigió InvalidationTracker para las bases de datos personalizadas. b/63162311
1.0.0 Alpha 6: 25 de julio de 2017
Cambios en el comportamiento
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 deobserver2
, recibiríaON_CREATE
y todos los otros eventos antes deobserver2
. 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: siobserver1
se agrega antes deobserver2
, entoncesON_CREATE
se envía primero aobserver1
y luego aobserver2
(lo mismo sucede paraON_START
yON_RESUME
), pero el eventoON_PAUSE
se envía primero aobserver2
y solo entonces aobserver1
(lo mismo sucede paraON_STOP
yON_DESTROY
).Room arroja 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()
aRoomDatabase.Builder
para borrar la base de datos si falta la migración. b/63872392Ahora los componentes de la arquitectura dependen de la biblioteca de compatibilidad 26.0.0.
Correcciones de errores
Se corrigió la manera en que se procesa @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 búsquedas 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
Se agregó un nuevo método de devolución de llamada a
RoomDatabase.Builder
para observar cuando se crea o abre una base de datos. b/62699324Ahora @Query puede mostrar RxJava
Maybe
oSingle
. b/62231019
Dependes del artefacto android.arch.persistence.room:rxjava2
para agregar compatibilidad con RxJava en Room.
Correcciones de errores
Se corrigieron las búsquedas de
@Delete
sin ningún parámetro. b/63608092Se corrigieron las verificaciones de tipo de Room para métodos get y set. b/63733651
1.0.0 Alpha 4: 11 de julio de 2017
Cambios en la API
Se agregó un nuevo 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ó la manera en que se procesa
byte[]
en los métodos@Dao
. b/62460045Ahora 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 admite un parámetro de evento. 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 con anotaciones@OnLifecycleEvent(ON_ANY)
pueden recibir un segundo parámetro de tipoEvent
(el primer parámetro esLifecycleOwner
). Consulta la documentación de Lifecycle para obtener más información.Las clases
LifecycleActivity
yLifecycleFragment
se trasladan al artefactoandroid.arch.lifecycle:extensions
.MigrationTestHelper recibe la instancia Instrumentation en lugar del
Context
para poder leer el esquema a partir de los elementos de prueba y crear la base de datos en el contexto de aplicación.Ahora las anotaciones
@Insert
,@Delete
y@Update
en los métodos@DAO
pueden tenerIterable
como tipo de parámetro. b/62259820
Correcciones de errores
Ya no se realizan varias llamadas a métodos anulados con eventos de ciclo de vida.
Ahora los parámetros
IN
numerosos se procesan correctamente. b/62608681Ahora las clases DAO abstractas tienen un constructor que recibe la instancia
@Database
. b/38488747Ahora 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
Ahora la devolución de llamada de InvalidationTracker recibe la lista de nombres de tabla cambiados. (b/38468740)
Se redujo la superficie de API de la clase SupportSQLiteDatabase. (b/38481640)
Correcciones de errores
- Archivos de ProGuard para ciclos de vida (b/62113696)
- Pérdida de datos con convertidores de tipo (b/62100716)
- Permite que se muestre
Long[]
de las búsquedas@Insert
.
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
Fragment
yActivityCompat
de Lifecycle en la Biblioteca de compatibilidad todavía no implementan la interfazLifecycleOwner
. Lo harán en la versión 1.0.0 de los componentes de la arquitectura.