15 janvier 2019
WorkManager
Publication de WorkManager 1.0.0-beta02
. Cette version contient des corrections de bugs.
Correction de bugs
- Correction d'un cas extrême où le travail périodique pouvait s'exécuter plusieurs fois par intervalle sur des appareils équipés d'Android 6.0 (niveau d'API 23). b/121998363
- Correction d'une
ConcurrentModificationException
sur les appareils équipés d'Android 5.1 (niveau d'API 22) ou version antérieure. b/121345393 - Correction de l'exécution erronée d'un travail qui se produisait lorsque les contraintes n'étaient pas respectées sur les appareils équipés d'Android 5.1 (niveau d'API 22) ou version antérieure. b/122578012
- Optimisation de la gestion de l'achèvement du travail pour accélérer le processus dans certains cas extrêmes. b/122358129
- Modification permettant de répondre aux conditions de concurrence potentielles dans plusieurs instances de
LiveData
utilisées par WorkManager. - Adoption de la dépendance
1.1.1
deRoom
au lieu de1.1.1-rc01
. Ces versions sont identiques. b/122578011
19 décembre 2018
WorkManager
Publication de WorkManager 1.0.0-beta01
. Cette version ne contient aucune modification de l'API. À l'avenir, WorkManager devrait conserver l'API stable jusqu'à la prochaine version, sauf en cas de problème critique. Cette version contient des corrections de bugs.
Correction de bugs
- Les enfants précédemment annulés des travaux parents terminés ne seront plus exécutés. b/120811767
- Classes de journalisation correctement initialisées (principalement exposées lors des tests).
18 décembre 2018
Navigation
Publication de Navigation 1.0.0-alpha09
. Cette version contient des modifications destructives apportées à l'API. Veuillez consulter la section Modifications destructives ci-dessous.
Nous avons choisi de ne pas continuer à développer l'artefact android.arch.navigation:navigation-testing
. Bien qu'il s'avère utile pour les tests internes de NavController
, nous vous recommandons vivement d'utiliser d'autres stratégies de test, telles que la simulation de l'instance NavController
, afin de vérifier que les bons appels navigate()
sont en cours. Cette approche est décrite en détail dans la conférence sur l'activité unique de l'Android Dev Summit 2018. Nous allons également travailler sur une documentation supplémentaire concernant les tests avec Navigation.
Nouvelles fonctionnalités
- Les
MenuItem
présentant l'élémentmenuCategory="secondary"
ne s'affichent plus dans la pile "Retour" lorsqu'ils sont utilisés avec les méthodesNavigationUI
(b/120104424). AppBarConfiguration
vous permet désormais de définir une instanceOnNavigateUpListener
de remplacement qui sera appelée lorsquenavController.navigateUp()
renvoiefalse
. (b/79993862) (b/120690961)
Modifications destructives
- Lorsque vous utilisez un
<argument>
avec unargType="reference"
, Navigation n'analyse plus la référence, mais fournit l'ID de ressource brute (b/111736515). onNavDestinationSelected()
s'affiche maintenant par défaut sur la destination de départ de votre graphique de navigation pour plus de cohérence avec les méthodessetup
. AjoutezmenuCategory="secondary"
à votreMenuItem
pour éviter l'affichage de la pile "Retour" (aosp/852869).- Les méthodes
fromBundle()
des classesArgs
générées prennent maintenant une valeur deBundle
non nulle au lieu d'une valeur deBundle
nullable (aosp/845616).
Correction de bugs
- Les arguments sont maintenant correctement analysés à partir des liens profonds, en tant que
argType
correct, et non plus en tant que chaînes (b/110273284). - Navigation exporte désormais correctement ses ressources publiques (b/121059552).
- Safe Args est désormais compatible avec le plug-in Android Gradle 3.4 Canary 4 ou version ultérieure. b/119662045
12 décembre 2018
WorkManager
Publication de WorkManager 1.0.0-alpha13
. Cette version contient une modification mineure de l'API qui sera utile pour certains utilisateurs de Kotlin.
Modifications apportées à l'API
androidx.work.Result
a été déplacé vers une classe interne deListenableWorker
. Cela permet d'éviter les conflits de refactorisation avec la classeResult
de niveau supérieur de Kotlin. Il s'agit d'une modification destructive de l'API. b/120564418
Modifications destructives de l'API
androidx.work.Result
a été déplacé vers une classe interne deListenableWorker
.
6 décembre 2018
Paging
Publication de Paging 2.1.0-rc01
sans aucune modification par rapport à la version 2.1.0-beta01
.
Navigation
Publication de Navigation 1.0.0-alpha08
. Cette version contient des modifications destructives apportées à l'API. Veuillez consulter la section Modifications destructives ci-dessous.
Nouvelles fonctionnalités
- Lorsqu'ils sont utilisés avec les méthodes
NavigationUI
, les libellés de destination remplacent automatiquement les instances{argName}
dans votreandroid:label
par l'argument approprié (b/80267266). - Navigation dépend désormais de la bibliothèque Support 28.0.0 (b/120293333).
Modifications destructives
OnNavigatedListener
a été renomméOnDestinationChangedListener
(b/118670572).- Désormais,
OnDestinationChangedListener
transmet également leBundle
des arguments (aosp/837142). - Les attributs
app:clearTask
etapp:launchDocument
, ainsi que les méthodes associées, ont été supprimés. Utilisezapp:popUpTo
avec la racine de votre graphique pour supprimer toutes les destinations de votre pile "Retour" (b/119628354). ActivityNavigator.Extras
utilise désormais un schémaBuilder
et permet de définir n'importe quel indicateurIntent.FLAG_ACTIVITY_
(aosp/828140).NavController.onHandleDeepLink
a été renomméhandleDeepLink
(aosp/836063).- De nombreuses classes et méthodes qui ne sont pas destinées au sous-classement, telles que
NavOptions
,NavInflater
,NavDeepLinkBuilder
etAppBarConfiguration
, sont devenuesfinal
(aosp/835681). - La méthode obsolète
NavHostFragment.setGraph()
a été supprimée (aosp/835684). - La méthode obsolète
NavigationUI.navigateUp(DrawerLayout, NavController)
a été supprimée (aosp/835684). - La création de fragments a été déplacée vers
FragmentNavigator
, ce qui permet de déléguer plus facilement la création de fragments à uneFragmentFactory
(b/119054429). - Le constructeur de
NavGraphNavigator
n'utilise plus deContext
(aosp/835340). - NavigatorProvider est désormais une classe plutôt qu'une interface. Aucune modification des fonctionnalités du
NavigatorProvider
renvoyé pargetNavigatorProvider()
(aosp/830660). NavDestination.navigate()
a été supprimé. Appelez plutôtnavigate()
surNavigator
(aosp/830663).- Refactorisation significative de
Navigator
, qui n'a plus besoin deOnNavigatorNavigatedListener
. À la place,navigate
renvoie laNavDestination
vers laquelle il a navigué. - Les instances de
Navigator
ne peuvent plus envoyer d'événements d'affichage auNavController
. Envisagez d'utiliser unOnBackPressedCallback
pour intercepter les pressions sur le bouton "Retour" et appelernavController.popBackStack()
(aosp/833716).
Correction de bugs
popUpTo
fonctionne désormais de manière cohérente lorsque la destination est un élément<navigation>
(b/116831650).- Correction d'un certain nombre de bugs entraînant une
IllegalArgumentException
lors de l'utilisation de graphiques imbriqués (b/118713731 b/113611083 b/113346925 b/113305559). - L'attribut
dataPattern
des destinations<activity>
remplira maintenant les arguments à partir d'arguments qui ne sont pas des chaînes en appelanttoString()
(b/120161365).
Safe Args
- Safe Args prend en charge les objets sérialisables, y compris les valeurs d'énumération. Les types d'énumération peuvent définir une valeur par défaut à l'aide du littéral d'énumération sans le nom de la classe (par exemple,
app:defaultValue="READ"
) (b/111316353). - Safe Args prend en charge les tableaux de tous les types compatibles (b/111487504).
- Safe Args ignore désormais les sous-dossiers des répertoires de ressources (b/117893516).
- Safe Args ajoute les annotations
@Override
le cas échéant. b/117145301
5 décembre 2018
WorkManager
Publication de WorkManager 1.0.0-alpha12
. Cette version contient des modifications destructives apportées à l'API. Veuillez consulter la section Modifications destructives de l'API ci-dessous. Cette version sera probablement notre première version bêta. La version alpha12
contient également des mises à jour importantes de la documentation.
Modifications apportées à l'API
- Un nouvel artefact,
work-rxjava2
, introduitRxWorker
. Il s'agit d'unListenableWorker
qui attend uneSingle<Payload>
. - Suppression de la compatibilité avec Firebase JobDispatcher en raison de son abandon imminent. Par conséquent, l'artefact
work-firebase
ne sera plus mis à jour lorsque nous passerons à la version bêta. Nous envisageons d'ajouter une alternative à l'avenir. - Intégration de
Payload
àResult
.Result
est désormais une "classe scellée" avec trois implémentations concrètes, que vous pouvez obtenir viaResult.success()
(ouResult.success(Data)
),Result.failure()
(ouResult.failure(Data)
) etResult.retry()
. VosListenableFuture
génèrent désormais unResult
au lieu d'unePayload
. LesWorker
n'ont pas de méthodes "getter" et "setter" pour lesData
de sortie. Il s'agit d'une modification destructive. - Ajout de
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
, deConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
et de variantes pour permettre une meilleure compatibilité avec les URI de contenu à déclenchement lent. b/119919774 - Ajout de la variante
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
. Cette méthode nécessite le niveau d'API 26. - Ajout des méthodes d'extension Kotlin
Operation.await()
etListenableFuture.await()
. - Changement de nom :
Operation.getException()
devientOperation.getThrowable()
. Il s'agit d'une modification destructive. - La classe
ContentUriTriggers
et les méthodes qui y font référence ne sont plus disponibles pour une utilisation publique. Il s'agit d'une modification destructive. - Suppression des autres méthodes de varargs dans
WorkManager
,WorkContinuation
etOneTimeWorkRequest
afin de simplifier l'API. Vous pouvez encapsuler vos varargs existants avecArrays.asList(...)
pour corriger les problèmes de compilation. Nous incluons toujours les versions à argument unique de chaque méthode. Il s'agit d'une modification destructive. - Suppression des variantes
WorkContinuation.combine(OneTimeWorkRequest, *)
. Elles présentaient une API qui prêtait à confusion. Les méthodescombine
existantes sont plus faciles à comprendre. Il s'agit d'une modification destructive.
Correction de bugs
- Les implémentations antérieures à Marshmallow sont désormais plus fiables lors de la récupération de la fin du processus d'une tâche déjà en cours d'exécution.
LiveData
est observé parobserveForever
et suivi par WorkManager. Il s'agit d'un rétroportage d'une correction de la bibliothèque Room. b/74477406Data.Builder.build()
génère désormais une exception si l'objet sérialisé dépasse sa taille maximale. Auparavant, cette opération ne se produisait que sur un thread d'arrière-plan qui empêchait une gestion correcte.- Plus grande distinction entre les travaux arrêtés et annulés.
getWorkInfoById()
renvoieWorkInfo
avec leState
CANCELLED
pendantListenableWorker.onStopped()
. - Traitement des
Result
null
comme des échecs dansListenableWorker
. b/120362353 - Correction potentielle pour les tablettes Shield exécutant le niveau d'API 24, qui génère parfois une
IllegalArgumentException
. b/119484416
Modifications destructives de l'API
- Suppression de la compatibilité avec Firebase JobDispatcher en raison de son abandon imminent. Par conséquent, l'artefact
work-firebase
ne sera plus mis à jour lorsque nous passerons à la version bêta. Nous envisageons d'ajouter une alternative à l'avenir. - Intégration de
Payload
àResult
.Result
est désormais une "classe scellée" avec trois implémentations concrètes, que vous pouvez obtenir viaResult.success()
(ouResult.success(Data)
),Result.failure()
(ouResult.failure(Data)
) etResult.retry()
. VosListenableFuture
génèrent désormais unResult
au lieu d'unePayload
. LesWorker
n'ont pas de méthodes "getter" et "setter" pour lesData
de sortie. - Ajout des méthodes d'extension Kotlin
Operation.await()
etListenableFuture.await()
. - Changement de nom :
Operation.getException()
devientOperation.getThrowable()
. - La classe
ContentUriTriggers
et les méthodes qui y font référence ne sont plus disponibles pour une utilisation publique. - Suppression des autres méthodes de varargs dans
WorkManager
,WorkContinuation
etOneTimeWorkRequest
afin de simplifier l'API. Vous pouvez encapsuler vos varargs existants avecArrays.asList(...)
pour corriger les problèmes de compilation. Nous incluons toujours les versions à argument unique de chaque méthode. - Suppression des variantes
WorkContinuation.combine(OneTimeWorkRequest, *)
. Elles présentaient une API qui prêtait à confusion. Les méthodescombine
existantes sont plus faciles à comprendre.
4 décembre 2018
Room
Publication de Room 2.1.0-alpha03
avec prise en charge des coroutines et plusieurs corrections de bugs.
Modifications apportées à l'API
- Le FTS
tokenizer
dans@Fts3
/@Fts4
utilise désormais une chaîne au lieu d'une énumération. Cela permet à Room d'utiliser des générateurs de jetons personnalisés. Les générateurs de jetons intégrés sont toujours définis dansFtsOptions
en tant que constantes de chaîne. b/119234881
Nouvelles fonctionnalités
- Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Publication d'un nouvel artefact,
room-coroutines
, pour permettre la suspension de fonctions dans Room. b/69474692 - Les méthodes DAO annotées avec
@Insert
,@Delete
ou@Update
prennent désormais en chargeListenableFuture
comme type renvoyé. b/119418331
Correction de bugs
- Correction d'un bug à cause duquel Room tentait par erreur de trouver un constructeur avec des colonnes dans la propriété
ignoredColumns
de@Entity
. b/119830714 - Correction d'un bug qui empêchait Room de marquer les paramètres de méthode DAO comme finaux dans l'implémentation générée. b/118015483
- Correction d'un bug provoquant le plantage du processeur de Room lors du signalement d'une erreur sur une requête contenant des symboles spéciaux. b/119520136
- Correction d'un bug provoquant le refus par Room de plusieurs implémentations de
Collection
en tant qu'arguments d'une expressionIN
. b/119884035 - Correction d'un bug provoquant la récupération de mémoire des "LiveData" renvoyées par Room lorsqu'elles étaient indéfiniment observées, empêchant ainsi l'émission de nouvelles données. b/74477406
- Mise à jour du verrouillage de fin de
RoomDatabase
pour réduire les conflits de verrouillage. b/117900450
8 nov. 2018
WorkManager
Publication de WorkManager 1.0.0-alpha11
. Cette version contient de nombreuses modifications qui permettront d'obtenir une API stable en version beta
.
Cette version comprend des modifications destructives apportées à l'API. Veuillez consulter la section Modifications destructives de l'API ci-dessous.
Modifications apportées à l'API
work-runtime-ktx
introduit un nouveauCoroutineWorker
.WorkStatus
a été renomméWorkInfo
. Toutes les variantes correspondantes de la méthodegetStatus
ont été renommées en variantes correspondantes degetWorkInfo
. Il s'agit d'une modification destructive.ListenableWorker.onStopped()
n'accepte plus l'argument booléen indiquant siWorkRequest
a été annulé.WorkManager
ne fait plus cette distinction. Il s'agit d'une modification destructive.- Le package
androidx.work.test
a été renomméandroidx.work.testing
. Il s'agit d'une modification destructive. - Les méthodes "setter" de
Constraints
ne font plus partie de l'API publique. Il s'agit d'une modification destructive. - Auparavant,
WorkerParameters.getTriggeredContentUris()
etWorkerParameters.getTriggeredContentAuthorities()
renvoyaient des tableaux. Ces méthodes renvoient maintenant des collections. Il s'agit d'une modification destructive. ListenableWorker.onStartWork()
a été renomméListenableWorker.startWork()
. Il s'agit d'une modification destructive.- Le constructeur de
WorkStatus
ne fait plus partie de l'API publique. Il s'agit d'une modification destructive. Configuration.getMaxJobSchedulerID()
etConfiguration.getMinJobSchedulerID()
sont renommésConfiguration.getMinJobSchedulerId()
etConfiguration.getMaxJobSchedulerId()
, respectivement. Il s'agit d'une modification destructive.- Ajout de nombreuses annotations
@NonNull
à l'API publique pour améliorer son ergonomie. - Ajout de l'API
WorkManager.enqueueUniqueWork()
pour placer desOneTimeWorkRequest
uniques en file d'attente sans avoir à créer deWorkContinuation
. - Toutes les variantes des méthodes
enqueue
etcancel
surWorkManager
renvoient désormais un nouveau typeOperation
. Il s'agit d'une modification destructive. - Toutes les variantes de
enqueue
n'acceptent plus les varargs pourWorkRequest
. Il s'agit d'une modification destructive. Utilisez plutôt des collections. Vous pouvez utiliserArrays.asList()
pour modifier le code existant. Nous avons apporté cette modification pour réduire le nombre de méthodes et la surface de l'API. - Désormais, les tentatives de
initialize
WorkManager
répétées plus d'une fois par processus entraîneront uneIllegalStateException
. Il s'agit d'une modification destructive.
Correction de bugs
- Les
WorkRequest.Builder
de l'artefactwork-runtime-ktx
utilisent désormais desListenableWorker
. Corrections b/117666259 - Assurez-vous que la prochaine exécution de
PeriodicWork
se déroule dans le futur. Corrections b/118204399 - Suppression des E/S de disque potentielles lors de l'utilisation de WorkManager au démarrage de l'application. Corrections b/117796731
- Correction d'une condition de concurrence dans
WorkConstraintsTracker
. Corrections android-workmanager/issues/56
Modifications destructives de l'API
WorkStatus
a été renomméWorkInfo
. Toutes les variantes correspondantes de la méthodegetStatus
ont été renommées en variantes correspondantes degetWorkInfo
.ListenableWorker.onStopped()
n'accepte plus l'argument booléen indiquant siWorkRequest
a été annulé.WorkManager
ne fait plus cette distinction.- Le package
androidx.work.test
a été renomméandroidx.work.testing
. - Les méthodes "setter" de
Constraints
ne font plus partie de l'API publique. - Auparavant,
WorkerParameters.getTriggeredContentUris()
etWorkerParameters.getTriggeredContentAuthorities()
renvoyaient des tableaux. Ces méthodes renvoient maintenant des collections. ListenableWorker.onStartWork()
a été renomméListenableWorker.startWork()
.- Le constructeur de
WorkStatus
ne fait plus partie de l'API publique. Configuration.getMaxJobSchedulerID()
etConfiguration.getMinJobSchedulerID()
sont renommésConfiguration.getMinJobSchedulerId()
etConfiguration.getMaxJobSchedulerId()
, respectivement.- Toutes les variantes des méthodes
enqueue
etcancel
surWorkManager
renvoient désormais un nouveau type d'Operation
. - Toutes les variantes de
enqueue
n'acceptent plus les varargs pourWorkRequest
. - Désormais, les tentatives de
initialize
WorkManager
répétées plus d'une fois par processus entraîneront uneIllegalStateException
.
1er novembre 2018
Paging
Publication de Paging 2.1.0-beta01
sans aucune modification par rapport à la version 2.1.0-alpha01
.
30 octobre 2018
Room
Publication de Room 2.1.0-alpha02
avec plusieurs corrections de bugs et une nouvelle fonctionnalité.
Nouvelles fonctionnalités
- Ajout de la prise en charge du référencement de
@DatabaseView
dans une@Relation
. b/117680932
Correction de bugs
- Correction d'un bug provoquant l'exécution d'opérations d'E/S de disque par Room dans le thread principal lors de l'abonnement ou de la suppression à partir d'un type renvoyé Rx. b/117201279
- Correction d'un bug qui empêchait Room de trouver un convertisseur de type approprié pour un champ dans une classe d'entité Kotlin. b/111404868
- Correction d'un bug entraînant la génération par Room d'un code incorrect pour une implémentation d'interface
DAO
contenant une méthode par défaut Kotlin sans argument. b/117527454 - Mise à jour de l'analyseur grammatical SQLite de Room pour corriger un problème de performances pouvant entraîner de longs délais de compilation. b/117401230
29 octobre 2018
Navigation
Publication de Navigation 1.0.0-alpha07
avec des corrections de bugs et des modifications apportées à l'API.
Nouvelles fonctionnalités
- Une nouvelle classe AppBarConfiguration vous permet de personnaliser les destinations considérées comme des destinations de niveau supérieur. Pour en savoir plus, consultez la documentation mise à jour (b/117333663).
- Vous pouvez maintenant transmettre des arguments à la destination de départ de votre graphique (b/110300470).
- Désormais, les liens profonds prennent en charge les schémas personnalisés contenant des points, des tirets et des signes plus (b/112806402).
Modifications destructives
- Le module
navigation-testing-ktx
a été intégré ànavigation-testing artifact
et ne sera plus publié. - L'artefact
navigation-testing
dispose désormais d'une dépendance à la bibliothèque standard Kotlin. L'API a été modifiée pour être plus cohérente avec les conventions Kotlin, mais vous pouvez continuer à l'utiliser pour les tests écrits en Java. - Les graphiques de navigation enregistrés pour le fichier manifeste de métadonnées ne sont plus pris en charge (b/118355937).
- Les actions ne peuvent plus être associées aux destinations <activity> (aosp/785539).
Correction de bugs
- Les liens profonds analysent désormais correctement les paramètres de requête (b/110057514).
- Désormais, les destinations Activity appliquent correctement toutes les animations d'entrée et de sortie (b/117145284).
- Correction d'un plantage survenant après la modification de la configuration lors de l'utilisation de navigateurs personnalisés (b/110763345).
Safe Args
- Safe Args dispose désormais d'une dépendance fixe sur le plug-in Android Gradle 3.2.1 (b/113167627).
- Il est désormais possible de générer des directions pour les classes internes (b/117407555).
- Correction d'un problème lors de la génération de directions pour un graphique <include>. b/116542123
12 octobre 2018
Paging
Publication de Paging 2.1.0-alpha01
avec deux nouveautés majeures : l'abandon de pages et les bibliothèques d'extensions KTX pour chaque artefact, ainsi que plusieurs autres modifications d'API et corrections de bugs.
Modifications apportées à l'API
- Ajout de
PagedList.Config.Builder.setMaxSize()
permettant de limiter le nombre d'éléments chargés en mémoire. - Ajout de
androidx.paging.Config()
comme alternative Kotlin pourPagedList.Config.Builder
. - Ajout de
androidx.paging.PagedList()
comme alternative Kotlin pourPagedList.Builder
. - Ajout de
DataSourceFactory.toLiveData()
comme alternative Kotlin pourLivePagedListBuilder
. - Ajout de
DataSourceFactory.toObservable()
ettoFlowable()
comme alternatives Kotlin pourRxPagedListBuilder
. - Ajout de
AsyncPagedListDiffer.addPagedListListener()
pour écouter lorsque "PagedList" est remplacée. b/111698609 - Ajout de la variante
PagedListAdapter.onCurrentListChanged()
, qui transmet l'ancienne et la nouvelle liste. La variante précédente est désormais obsolète. - Ajout de variantes
PagedListAdapter/AsyncPagedListDiffer.submitList()
, qui acceptent un rappel supplémentaire déclenché si/quand PagedList est affiché, après vérification différentielle (diffing). Cette option permet de synchroniser un remplacement de PagedList avec d'autres mises à jour de l'UI. b/73781068 - Ajout de
PagedList.getLoadedCount()
pour indiquer le nombre d'éléments en mémoire. Notez que la valeur renvoyée est toujours égale à.size()
si les espaces réservés sont désactivés.
Correction de bugs
- Correction d'une condition de concurrence lors de la vérification différentielle (diffing) en cas de réutilisation de listes. b/111591017
IndexOutOfBoundsException
génère désormais unePagedList.loadAround()
lorsque l'index n'est pas valide. Auparavant, ce problème pouvait provoquer un plantage associé à une exception indéfinie.- Correction d'un problème d'arrêt du chargement survenant suite à un chargement initial extrêmement faible avec des données inchangées. b/113122599
11 octobre 2018
WorkManager
Publication de WorkManager 1.0.0-alpha10
avec prise en charge du travail asynchrone contrôlé par le développeur. Cette version comprend des modifications destructives apportées à l'API. Veuillez consulter la section Modifications destructives de l'API ci-dessous.
Nous pensons que WorkManager entre dans les phases finales de sa période alpha. La version bêta devrait être stable au niveau de l'API. Nous vous invitons donc à nous faire part de vos commentaires sur notre Issue Tracker.
Modifications apportées à l'API
- Suppression de toutes les classes et méthodes précédemment
deprecated
, en particulier le constructeurWorker
par défaut. Il s'agit d'une modification destructive de l'API. NonBlockingWorker
a été renomméListenableWorker
, qui est maintenant une classe publique non masquée et prête à l'emploi.ListenableWorker
permet d'accéder à une méthode abstraite,ListenableFuture<Payload> onStartWork()
, qui est appelée sur le thread principal. Il vous appartient de commencer et de traiter le travail de manière asynchrone. Lorsque vous avez terminé, mettez à jour leListenableFuture
de manière appropriée. Les implémentations de référence desListenableFuture
sont fournies dans le packageFutures
de la versionalpha02
(voir la sectionWorkManager
ci-dessous).Worker
étendListenableWorker
et fonctionne comme avant, avec une méthodeResult doWork()
abstraite.- Passage de certaines méthodes et de certains membres de
Worker
àListenableWorker
. - Nous fournirons bientôt des implémentations de référence pour les
ListenableWorker
utilisant des coroutines Kotlin (une fois les versions stables publiées) et RxJava2.
- L'interface
WorkerFactory
et l'implémentation concrèteDefaultWorkerFactory
ont été fusionnées dans une classe abstraite appeléeWorkerFactory
. L'implémentation garantit que le comportement par défaut basé sur la réflexion est appelé en dernier recours pour toutes les instancesWorkerFactory
créées par l'utilisateur. Il s'agit d'une modification destructive. - Suppression de
WorkManager.synchronous()
, deWorkContinuation.synchronous()
et de toutes les méthodes associées. Ajout deListenableFuture<Void>
comme type renvoyé de nombreuses méthodes dans l'API. Il s'agit d'une modification destructive de l'API.- Vous pouvez désormais utiliser
ListenableFuture
pour obtenir et observer de manière synchrone. Par exemple,WorkManager.enqueue()
permet de renvoyervoid
. Il renvoie désormais unListenableFuture<Void>
. Une fois l'opération terminée, vous pouvez appelerListenableFuture.addListener(Runnable, Executor)
ouListenableFuture.get()
pour exécuter le code. - Notez que ces
ListenableFuture
ne vous indiquent pas la réussite ou l'échec de l'opération, mais seulement qu'elle est terminée. Vous devrez toujours associer les méthodes WorkManager pour obtenir ces informations. - Nous ignorons les appels
cancel()
sur ces objets, car ils sont source de confusion et difficiles à justifier (vous annulez l'opération ou son résultat ?). Cela est prévu dans le contratFuture
. - Pour conserver la parité avec les méthodes
getStatus*
synchrones, nous avons fourni des variantesListenableFuture
et renommé les méthodes existantes renvoyantLiveData
afin d'inclure explicitement "LiveData" dans le nom (par exemple,getStatusesByIdLiveData(UUID)
). Il s'agit d'une modification destructive de l'API.
- Vous pouvez désormais utiliser
Correction de bugs
- Correction du problème connu de la version alpha09 concernant les fichiers
androidx-annotations.pro
en double. Vous pouvez supprimer la solution de contournement des notes de version précédentes en supprimantexclude 'META-INF/proguard/androidx-annotations.pro'
de votre fichier Gradle. - Ajout de configurations ProGuard pour conserver le nouveau constructeur
Worker
. b/116296569 - Correction d'une
NullPointerException
potentielle dans une condition de concurrence où le travail étaitREPLACE
. b/116253486 et b/116677275 WorkContinuation.combine()
accepte désormais une ou plusieursWorkContinuation
au lieu de deux ou plus. b/117266752
Modifications destructives de l'API
- Suppression de toutes les classes et méthodes précédemment
deprecated
, en particulier le constructeurWorker
par défaut. - L'interface
WorkerFactory
et l'implémentation concrèteDefaultWorkerFactory
ont été fusionnées dans une classe abstraite appeléeWorkerFactory
. - Suppression de
WorkManager.synchronous()
et deWorkContinuation.synchronous()
. - Les méthodes
WorkManager.getStatus*()
renvoient désormaisListenableFuture
.WorkManager.getStatus*LiveData()
renvoitLiveData
.
Futures
Publication de Futures 1.0.0-alpha02
.
Modifications apportées à l'API
- Les développeurs peuvent désormais utiliser
ResolvableFuture
etAbstractResolvableFuture
comme implémentations concrètes légères deListenableFuture
.
8 octobre 2018
Room
Publication de Room 2.1.0-alpha01
.
Nouvelles fonctionnalités
- FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec
@Entity
peuvent désormais également être annotées avec@Fts3
ou@Fts4
pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation. b/62356416 - Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation "@DatabaseView". b/67033276
- Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations
@PrimaryKey
,@ColumnInfo
,@Embedded
et@Relation
de Room peuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de@CopyAnnotations
pour que Room puisse les comprendre. b/62408420 - Compatibilité supplémentaire avec les types renvoyés Rx : les méthodes DAO annotées avec
@Insert
,@Delete
ou@Update
sont désormais compatibles avec les types renvoyés RxCompletable
,Single<T>
etMaybe<T>
. b/63317956 - Types immuables avec
@Relation
: auparavant, Room exigeait que les champs portant l'annotation@Relation
puissent être définis, mais ils peuvent désormais servir de paramètres de constructeur. enableMultiInstanceInvalidation
est une nouvelle API deRoomDatabase.Builder
permettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données. Ce mécanisme d'invalidation multi-instance fonctionne également pour plusieurs processus. b/62334005fallbackToDestructiveMigrationOnDowngrade
: une nouvelle API deRoomDatabase.Builder
permettant de recréer automatiquement la base de données en cas de retour à une version antérieure. b/110416954ignoredColumns
: nouvelle API de l'annotation@Entity
qui permet de répertorier les champs ignorés par leur nom. Utile pour ignorer les champs hérités d'une entité. b/63522075
Modifications apportées à l'API/Nouveaux comportements
mCallback
etmDatabase
dansRoomDatabase
sont désormais@Deprecated
et seront supprimés dans la prochaine version majeure de Room. b/76109329
Correction de bugs
- Correction de deux problèmes entraînant une mauvaise récupération de Room à partir d'une base de données corrompue ou d'une migration incorrecte lors de l'initialisation. b/111504749 et b/111519144
- Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les champs en tant que
vars
. b/105769985
1er octobre 2018
Publication de Room 2.0.0
sans aucune modification par rapport à la version 2.0.0-rc01
.
Publication de Paging 2.0.0
avec une seule correction de bug.
Paging
Correction de bugs
- Correction d'un plantage qui pouvait se produire lors d'un défilement très rapide à l'aide de
PositionalDataSource
et d'espaces réservés. b/114635383
21 septembre 2018
Publication de Lifecycle 2.0.0
avec une correction de bug de la version 2.0.0-rc01
dans ViewModel.
Lifecycle
Correction de bugs
- Correction d'une règle ProGuard de ViewModel supprimant incorrectement des constructeurs. b/112230489
20 septembre 2018
Navigation
Publication de Navigation 1.0.0-alpha06
avec des corrections de bugs et des modifications apportées à l'API.
Nouvelles fonctionnalités
- Les transitions d'éléments partagés pour les destinations Fragment et Activity sont désormais prises en charge (b/79665225). Pour en savoir plus, consultez Implémenter la navigation avec le composant d'architecture de Navigation.
- La sélection d'un élément dans
NavigationView
entraînera la fermeture de toute "bottom sheet" avec contenu (b/112158843).
Modifications apportées à l'API
- Modification destructive : la méthode
navigate()
de Navigator utilise désormais un paramètreNavigator.Extras
. - La méthode
getGraph()
de NavController est désormaisNonNull
(b/112243286).
Correction de bugs
NavigationUI.setupWithNavController()
ne fuite plus de vues s'il est utilisé avec des vues provenant de destinations individuelles (b/111961977).- L'élément
onSaveState()
du navigateur n'est désormais appelé qu'une seule fois (b/112627079).
Safe Args
- Les classes Directions de la destination de Navigation étendent désormais la classe Directions de leurs parents, si elle existe (b/79871405).
- Les classes Directions et Args ont maintenant une implémentation
toString()
utile. b/111843389
19 septembre 2018
WorkManager
Publication de WorkManager 1.0.0-alpha09
avec des corrections de bugs, des mises à jour d'infrastructure et des modifications apportées à l'API.
Problème connu
Si le problème suivant s'affiche : "Plusieurs fichiers ayant le chemin d'accès indépendant 'META-INF/proguard/androidx-annotations.pro' ont été trouvés dans le système d'exploitation", veuillez utiliser la solution de contournement temporaire suivante dans votre fichier Gradle pendant que nous corrigeons le problème dans la version alpha10 :
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Correction de bugs
- Ajout d'une autre correction nécessaire pour l'erreur "100 tâches". b/115560696
- Ajout de corrections pour les erreurs de contraintes de clés étrangères en raison des conditions de concurrence. b/114705286
- Délégation des appels
ConstraintTrackingWorker.onStopped(boolean)
auWorker
sous-jacent. b/114125093 - Application d'un délai minimal correct d'intervalle entre les tentatives pour Firebase JobDispatcher. b/113304626
- Amélioration des garanties de threads internes de la bibliothèque.
- Correction de problèmes potentiels d'élimination des doublons de
LiveData
en interne.
Modifications apportées à l'API
- Vous pouvez maintenant créer vos propres instances
Worker
au moment de l'exécution en spécifiant uneWorkerFactory
dans leWorkManager.Configuration
. La fabrique de remplacement estDefaultWorkerFactory
, ce qui correspond au comportement des versions précédentes de WorkManager.- Les constructeurs par défaut pour
Worker
etNonBlockingWorker
sont désormais marqués comme obsolètes. Veuillez utiliser le nouveau constructeur (Worker(Context, WorkerParameters)
) et appelersuper(Context, WorkerParameters)
. Les futures versions de WorkManager supprimeront le constructeur par défaut.
- Les constructeurs par défaut pour
- Nous avons commencé à utiliser le nouvel artefact
ListenableFuture
en interne (sans dépendances Guava). Nous intégrerons "ListenableFutures" à l'API dans les prochaines versions. Cette modification permettra l'affichage final deNonBlockingWorker
. - Ajout de la possibilité de déclencher des travaux programmés dans
TestDriver
viaTestDriver.setInitialDelayMet(UUID)
etTestDriver.setPeriodDelayMet(UUID)
. b/113360060
Modifications destructives
- Les constructeurs
Worker
etNonBlockingWorker
par défaut sont obsolètes. Veuillez migrer vers le nouveau constructeur dès que possible. Les futures versions supprimeront le constructeur par défaut.
27 août 2018
WorkManager
Publication de WorkManager 1.0.0-alpha08
avec des corrections de bugs.
Correction de bugs
- Les composants de WorkManager sont explicitement libellés comme étant incompatibles avec le démarrage direct. Ils ne se déclenchent donc pas pendant le démarrage direct. À l'avenir, nous fournirons une version de WorkManager compatible avec le démarrage direct. b/112665532
- Correction d'un problème empêchant l'exécution de nouvelles tentatives. b/112604021
- Correction du problème empêchant l'exécution répétée du travail périodique (lié au problème ci-dessus). b/112859683
- Respect des règles d'intervalle entre les tentatives lorsque le processus de l'application est déjà en cours d'exécution.
- Correction des messages d'exception dans
Data
pour indiquer que la limite correspond à 10 Ko. - Diminution de la valeur maximale de
Configuration.setMaxSchedulerLimit(int)
à 50 pour tenir compte de la latence pendant le traitement deJobScheduler
. b/112817355
16 août 2018
WorkManager
Publication de WorkManager 1.0.0-alpha07
avec des corrections de bugs et des modifications mineures de l'API.
Correction de bugs
- Correction d'une potentielle requête SQL avec des limites négatives pouvant renvoyer un nombre illimité de résultats.
- Désormais, un travail dont l'exécution est terminée annule correctement toutes les copies en attente de ce travail dans d'autres planificateurs. Cela a entraîné le dépassement de la limite de tâches de
JobScheduler
. b/111569265 - Correction d'une
ConcurrentModificationException
dansConstraintTracker
. b/112272753 - Remplacement des annotations du type renvoyé de
Data.getBooleanArray(String)
etData.getIntArray(String)
par@Nullable
au lieu de@NonNull
. b/112275229
Modifications apportées à l'API
Worker
étend désormais une nouvelle classe,NonBlockingWorker
. Cela n'affecte pas l'utilisation actuelle. À l'avenir,NonBlockingWorker
deviendra une entité entièrement compatible avec les solutions de threads personnalisés.- Remplacement des annotations du type renvoyé de
Data.getBooleanArray(String)
etData.getIntArray(String)
par@Nullable
au lieu de@NonNull
. b/112275229 - Extensions de Kotlin : abandon de
Map.toWorkData()
et ajout d'unworkDataOf(vararg Pair<String, Any?>)
de niveau supérieur pour plus de cohérence avec les API existantes.
10 août 2018
Navigation
Publication de Navigation 1.0.0-alpha05
avec des corrections de bugs.
Correction de bugs
- Correction d'un bug qui entraîne un comportement incorrect de la pile "Retour" (b/111907708).
- Correction d'un bug dans
equals()
des classes Args générées (b/111450897). - Correction d'un échec de compilation dans Safe Args (b/109409713).
- Correction d'une conversion des identifiants de ressources en noms Java (b/111602491).
- Correction des messages d'erreur concernant la possibilité de valeur nulle dans le plug-in Safe Args.
- Ajout des annotations de possibilité de valeur nulle manquantes.
6 août 2018
Versions AndroidX de la version 2.0.0-rc01
de Lifecycle, Room et Paging. Aucun artefact n'a été modifié depuis la version 2.0.0-beta01
.
1er août 2018
WorkManager
Publication de WorkManager 1.0.0-alpha06
avec des corrections de bugs.
Correction de bugs
- Prévention du verrouillage des bases de données lors de la programmation du travail. b/111801342
- Correction d'un bug empêchant
PeriodicWork
de s'exécuter comme programmé en mode Sommeil. b/111469837 - Correction d'une condition de concurrence lors du suivi des contraintes entraînant le plantage de
WorkManager
. googlecodelabs/android-workmanager/issues/56 - Création de
WorkRequest
uniques lors de l'utilisation deWorkRequest.Builder#build()
. b/111408337 - Activation de l'utilisation de
RescheduleReceiver
uniquement lorsque nécessaire pour lesWorkRequest
. b/111765853
24 juillet 2018
WorkManager
Publication de WorkManager 1.0.0-alpha05
avec des corrections de bugs importants et des modifications apportées à la journalisation.
Modifications apportées à l'API
WorkManager.getInstance()
est désormais annoté avec@NonNull
au lieu de@Nullable
. En revanche, si le Singleton n'est pas correctement initialisé en cas d'initialisation manuelle, la méthode renvoie uneIllegalStateException
. Il s'agit d'une modification destructive de l'API.- Ajout d'une nouvelle API,
Configuration.Builder.setMinimumLoggingLevel(int)
, qui permet de contrôler le niveau de verbosité de WorkManager. Par défaut, WorkManager enregistreLog.INFO
et les versions ultérieures. - Modification de la signature de
Data.getString()
pour qu'elle ne prenne plus de valeur par défaut (implicitementnull
). Il s'agit d'une modification destructive de l'API. - Marquage de certaines méthodes comme uniquement réservées à une utilisation interne comme
@hide
. Cela inclut le constructeurConstraints
,Data.toByteArray()
etData.fromByteArray(byte[])
. Il s'agit d'une modification destructive de l'API.
Correction de bugs
- WorkManager n'exécute plus le travail dans les cas connus de sauvegarde automatique. Cela pourrait provoquer un plantage. b/110564377
- Correction de la double programmation de
PeriodicWorkRequest
lors de l'utilisation deJobScheduler
. b/110798652 - Correction d'un problème avec les
PeriodicWorkRequest
qui ne s'exécutent pas correctement après l'activation de la fonction Sommeil sur l'appareil. b/111469837 - Correction d'un problème avec les retards initiaux lors de l'utilisation de Firebase JobDispatcher. b/111141023
- Correction de certains problèmes temporels et de conditions de concurrence potentiels.
- Libération correcte de
BroadcastReceiver
devenus inutiles. - Optimisation des performances de la reprogrammation lors du redémarrage des applications après une fermeture forcée.
- Autorisation de l'appel de
TestScheduler.setAllConstraintsMet(UUID)
avant ou après la mise en file d'attente de laWorkRequest
donnée. b/111238024
Modifications destructives
WorkManager.getInstance()
est désormais annoté avec@NonNull
au lieu de@Nullable
.- Modification de la signature de
Data.getString()
pour qu'elle ne prenne plus de valeur par défaut (implicitementnull
). - Marquage de certaines méthodes comme uniquement réservées à une utilisation interne comme
@hide
. Cela inclut le constructeurConstraints
,Data.toByteArray()
etData.fromByteArray(byte[])
.
19 juillet 2018
Navigation
Navigation 1.0.0-alpha04
et le plug-in Safe Args de Gradle associé contiennent un certain nombre de modifications de l'API, de nouveaux comportements et de corrections de bugs.
Modifications apportées à l'API/Nouveaux comportements
- NavHostFragment définit toujours le fragment actuel comme fragment de navigation principal, garantissant ainsi que les gestionnaires de fragments enfants s'affichent avant le NavController externe (b/111345778).
Safe Args
- Modification destructive :
app:type
a été remplacé parapp:argType
pour éviter les conflits avec d'autres bibliothèques telles que ConstraintLayout 2.0.0-alpha1. (b/111110548) - Vous pouvez désormais cliquer sur les messages d'erreur de Safe Args (b/111534438).
- Les classes Args confirment désormais que les attributs
NonNull
ne sont pas nuls (b/111451769). - Des annotations
NonNull
supplémentaires ont été ajoutées aux classes générées NavDirections et Args (b/111455455 b/111455456).
Correction de bugs
- Correction d'un problème lié au bouton "Retour" du système après l'établissement d'un lien profond vers une destination de fragment. b/111515685
12 juillet 2018
Navigation
Navigation 1.0.0-alpha03
et le plug-in Safe Args de Gradle associé contiennent un certain nombre de modifications de l'API, de nouveaux comportements et de corrections de bugs.
Modifications apportées à l'API/Nouveaux comportements
- Ajout d'une méthode NavigationUI.setupWithNavController pour la barre d'outils (b/109868820).
- Ajout d'une méthode NavigationUI.setupWithNavController pour CollapsingToolbarLayout (b/110887183).
- popBackStack() renvoie désormais "false" lorsque la pile "Retour" est vide ou lorsque l'ID de destination donné ne figure pas dans la pile "Retour" (b/110893637).
- FragmentNavigator ignore maintenant les opérations de navigation une fois que FragmentManager dispose d'un état enregistré, évitant ainsi les exceptions "Impossible d'exécuter cette action après onSaveInstanceState" (b/110987825).
Safe Args
- Modification destructive : Les caractères non alphanumériques des noms d'actions et d'arguments seront remplacés par une casse mixte dans les noms de méthodes NavDirections respectifs.
- Par exemple,
DemoController.index
deviendrasetDemoControllerIndex
. (b/79995048) - Par exemple,
action_show_settings
deviendraactionShowSettings
. (b/79642240)
- Par exemple,
- Modification destructive : Les arguments sont désormais considérés comme non nuls par défaut. Ajoutez
app:nullable="true"
pour autoriser les valeurs nulles pour les arguments parcelables et de chaîne (b/79642307). - Vous pouvez maintenant utiliser
app:type="long"
avec des defaultValues sous la forme "123L" (b/79563966). - Les arguments parcelables sont désormais pris en charge à l'aide d'un nom de classe complet pour
app:type
. La seule valeur par défaut prise en charge est"@null"
(b/79563966). - Les classes Args implémentent désormais
equals()
ethashCode()
(b/79642246). - Le plug-in Safe Args peut maintenant être appliqué aux projets de bibliothèque (b/80036553).
- Le plug-in Safe Args peut maintenant être appliqué aux projets de fonctionnalité (b/110011752).
Correction de bugs
- Correction des problèmes de navigation lors des méthodes de cycle de vie de Fragment (b/109916080).
- Correction de plusieurs problèmes de navigation dans les graphiques imbriqués (b/110178671).
- Correction de problèmes lors de l'utilisation de
setPopUpTo
avec la première destination dans le graphique (b/109909461). - Correction d'un problème lié à la transmission de toutes les valeurs
app:defaultValue
en tant que chaînes (b/110710788). - L'outil aapt2 fourni avec le plug-in Android Gradle 3.2 (version bêta 01) ajoute désormais des règles de conservation pour chaque attribut
android:name
dans les fichiers XML de Navigation (b/79874119). - Correction d'une fuite de mémoire lors du remplacement du "FragmentNavigator" par défaut. b/110900142
2 juillet 2018
Versions AndroidX de la version 2.0.0-beta01
de Lifecycle, Room et Paging.
Lifecycle
Correction de bugs
- Correction d'une règle ProGuard de LifecycleObserver pour ne conserver que les implémentations, et non les sous-interfaces. b/71389427
- Correction des règles ProGuard de ViewModel pour permettre l'obscurcissement et la minification.
Room
Modifications apportées à l'API/Nouveaux comportements
- Ajout de
RoomDatabase.Builder.setQueryExecutor()
pour permettre la personnalisation de l'emplacement d'exécution des requêtes. - Ajout de la compatibilité avec RxJava2
Observable
. - Les implémentations de DAO et de base de données générées sont maintenant finales.
Correction de bugs
- Spécification du nom de la classe ou du champ dans l'erreur "Impossible de trouver la fonction "getter" pour le champ". b/73334503
- Correction de la rétrocompatibilité de "RoomOpenHelper" avec les anciennes versions de Room. b/110197391
Paging
Correction de bugs
- Correction d'un problème de disparition du contenu dans certains cas de préfixe (espaces réservés désactivés, "PositionalDataSource"). b/80149146
- (Déjà publié dans
1.0.1
) Correction de plantages lors desquelsPagedListAdapter
etAsyncPagedListDiffer
ne parvenaient pas à signaler des événements de déplacement. b/110711937
26 juin 2018
Paging
Publication de Paging 1.0.1
avec une seule correction de bug dans runtime
. Nous vous recommandons vivement d'utiliser la version 1.0.1
pour plus de stabilité. La version 1.0.1
de Paging RxJava2 est également disponible. Elle est identique à la version 1.0.0-rc1
.
Correction de bugs
- Correction de plantages lors desquels
PagedListAdapter
etAsyncPagedListDiffer
ne parvenaient pas à signaler des événements de déplacement. b/110711937
WorkManager
Publication de WorkManager 1.0.0-alpha04
.
Correction de bugs
Les
PeriodicWorkRequest
sont désormais correctement reprogrammés lorsque vous utilisez l'implémentation basée surAlarmManager
.Correction d'une erreur ANR potentielle lors de la reprogrammation de tous les nœuds de calcul après un arrêt forcé ou un redémarrage. b/110507716
Ajout d'annotations de possibilité de valeur nulle à différentes API WorkManager. b/110344065
Journalisation des exceptions non détectées pendant l'exécution du nœud de calcul. b/109900862
Autorisation des migrations de bases de données destructives si vous décidez d'effectuer un rollback vers une ancienne version de WorkManager. b/74633270
Correction d'un problème de migration en cas de création de balises implicites en double. Il s'agit d'un problème très rare qui ne se produit que si vous utilisez vous-même le même format de balise implicite.
19 juin 2018
Room
Publication de Room 1.1.1
. Cette version est identique à celle de Room 1.1.1-rc1
.
WorkManager
Publication de WorkManager 1.0.0-alpha03
.
Correction de bugs
Correction d'une condition de concurrence dans l'implémentation basée sur
AlarmManager
. b/80346526Correction des tâches en double lors de l'utilisation de
JobScheduler
après un redémarrage de l'appareil.Les tâches comportant des déclencheurs d'URI de contenu sont maintenant conservées lors des redémarrages. b/80234744
Mises à jour de la documentation. b/109827628, b/109758949, b/80230748
Correction d'un plantage lors de la nouvelle mise en file d'attente d'une
WorkRequest
. b/109572353Correction des avertissements du compilateur Kotlin lors de l'utilisation de la dépendance
work-runtime-ktx
.WorkManager utilise désormais la version
1.1.1-rc1
deRoom
.
Modifications apportées à l'API
Ajout de
getStatusesSync()
, la version synchrone deWorkContinuation.getStatuses()
.Worker
permet de faire la distinction entre l'annulation déclenchée par l'utilisateur et l'arrêt temporaire demandé par l'OS.Worker.isStopped()
renvoietrue
si un type d'arrêt a été demandé.Worker.isCancelled()
renvoietrue
lorsque le travail a été explicitement annulé. b/79632247Ajout de la prise en charge de JobParameters#getNetwork() dans le niveau d'API 28. Cela est exposé via
Worker.getNetwork()
.Ajout de
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
afin que vous puissiez forcer le nombre de tâches pouvant être envoyées àJobScheduler
ouAlarmManager
. Cela permet d'éviter queWorkManager
n'occupe tous les emplacements disponibles deJobScheduler
.Ajout de
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, qui permet de définir une plage d'ID de tâchesJobScheduler
queWorkManager
peut utiliser de manière sûre. b/79996760Worker.getRunAttemptCount()
renvoie le nombre d'exécutions actuel pour unWorker
donné. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
vous permet de placer desPeriodicWorkRequest
uniques en file d'attente. b/79600647WorkManager.cancelAllWork()
annule tous lesWorker
. Les bibliothèques qui dépendent deWorkManager
peuvent vérifier quand cette méthode a été appelée pour la dernière fois en utilisantWorkManager.getLastCancelAllTimeMillis()
pour nettoyer davantage l'état interne.Ajout de
WorkManager.pruneWork()
pour supprimer les tâches terminées de la base de données interne. b/79950952, b/109710758
Nouveaux comportements
- Ajout d'une balise implicite pour tous les
WorkRequest
, qui correspond au nom de classe complet duWorker
. Cela permet de supprimer desWorkRequest
sanstag
ou lorsque l'id
n'est pas disponible. b/109572351
Modifications destructives
Changement de nom :
Worker.WorkerResult
devientWorker.Result
.Worker.onStopped
comporte désormais un paramètreisCancelled
supplémentaire défini surtrue
lorsque leWorker
a été explicitement annulé.
7 juin 2018
Publication de Navigation 1.0.0-alpha02
.
Navigation
Nouveaux comportements
FragmentNavigator
utilise désormaissetReorderingAllowed(true)
(b/109826220).Désormais, Navigation analyse les arguments URLDecodes à partir des URL des liens profonds (b/79982454).
Correction de bugs
Correction d'une
IllegalStateException
lors de l'appel de la navigation à partir des méthodes du cycle de vie de Fragment (b/79632233).Navigation dépend désormais de la bibliothèque Support 27.1.1 pour corriger le scintillement des animations (b/80160903).
Correction d'une
IllegalArgumentException
lors de l'utilisation de defaultNavHost="true" comme fragment enfant (b/79656847).Correction d'une
StackOverflowError
lors de l'utilisation de NavDeepLinkBuilder (b/109653065).Correction d'une
IllegalArgumentException
lors du retour à un graphique imbriqué (b/80453447).Correction d'un problème lié au chevauchement des fragments lors de l'utilisation de
launchSingleTop
(b/79407969).Navigation crée désormais la pile "Retour" synthétique appropriée pour les graphiques imbriqués (b/79734195).
NavigationUI met désormais en évidence l'élément approprié lorsque vous utilisez un graphique imbriqué en tant que
MenuItem
(b/109675998).
Modifications apportées à l'API
Abandon de l'attribut
clearTask
pour les actions et l'API associée dansNavOptions
. (b/80338878)Abandon de l'attribut
launchDocument
pour les actions et l'API associée dansNavOptions
. b/109806636
24 mai 2018
Publication de WorkManager 1.0.0-alpha02
.
WorkManager
Correction de bugs
Correction d'une
NullPointerException
dansState.isFinished()
. b/79550068Correction d'un problème provoquant la reprogrammation de
Worker
dansApplication.onCreate()
. b/79660657Correction d'un problème qui entraînait la programmation d'une quantité de travail supérieure à celle autorisée par le système d'exploitation. b/79497378
Déplacement du nettoyage des "wakelocks" associés à
Worker
vers le thread d'arrière-plan.L'implémentation de
AlarmManager
est désormais correctement nettoyée une fois le travail en attente terminé.Correction des requêtes SQL de nettoyage affectant les langues autres que l'anglais. b/80065360
Ajout de la prise en charge des
float
dansData
. b/79443878Data.Builder.putAll()
renvoie maintenant une instance deBuilder
. b/79699162Documentation contenant davantage de Javadoc et de corrections. b/79691663
Modifications apportées à l'API
Les
Worker
peuvent réagir à un arrêt.Worker.isStopped()
permet de vérifier si unWorker
a été arrêté.Worker.onStopped()
peut être utilisé pour effectuer des opérations de nettoyage légères.L'API
Worker.getTags()
renvoie unSet
de balises associées auWorker
.Ajout de surcharges
javax.time.Duration
pour les API qui combinent une durée et desTimeUnit
. Cela est protégé par@RequiresApi(26)
.Déplacement des extensions
WorkManager
du packageandroidx.work.ktx
vers le packageandroidx.work
. Abandon et suppression des anciennes extensions dans une prochaine version.Abandon de
Configuration.withExecutor()
. UtilisezConfiguration.setExecutor()
à la place.
16 mai 2018
Publication de Paging RxJava2 1.0.0-rc1
et Room 1.1.1-rc1
. Nous vous recommandons vivement d'utiliser Room 1.1.1-rc1
au lieu de la version 1.1.0
si vous utilisez des migrations.
Room
Correction d'un bug empêchant Room de gérer correctement l'initialisation après la migration. b/79362399
Paging
La version Paging rxjava2
devient admissible sans modification par rapport à la version alpha initiale.
8 mai 2018
Paging 1.0, versions alpha de Navigation et de WorkManager, Room 1.1, AndroidX
Publication de Paging 1.0.0
et Room 1.1.0
, ainsi que des versions alpha de deux nouveaux composants d'architecture : Navigation et WorkManager.
Paging et Room n'ont pas été modifiés depuis les dernières versions admissibles.
Nouvelle bibliothèque : Navigation
Navigation fournit un framework permettant de créer une navigation dans l'application. Cette version initiale est la version 1.0.0-alpha01
.
Nouvelle bibliothèque : WorkManager
WorkManager simplifie la programmation et l'exécution du travail en arrière-plan garanti et compatible avec les contraintes. Cette version initiale est la version 1.0.0-alpha01
.
AndroidX
Les composants d'architecture feront partie d'AndroidX, y compris les noms de packages mis à jour, les noms d'artefacts et les dépendances sur d'autres bibliothèques AndroidX.
Ils sont publiés sous la version 2.0.0-alpha1
pour être utilisés conjointement avec d'autres
Bibliothèques AndroidX.
Extensions Kotlin
ViewModel, ReactiveStreams et Sqlite (anciennement composant "Database" de Room) disposent tous de bibliothèques d'extensions Kotlin ajoutées à la version alpha d'AndroidX. En outre, Navigation et WorkManager comprennent des modules -ktx. Chacun de ces modules d'extension est disponible dans la section Ajouter des composants.
2 mai 2018
- Version admissible Room 1.1.0
- Publication de Room
1.1.0-rc1
.
Correction de bugs
- Room est désormais compatible avec Kotlin
1.2.40
. b/78328708
19 avril 2018
Version admissible de Paging
Publication de Paging 1.0.0-rc1
et Room 1.1.0-beta3
.
Paging
Nous n'avons aucun autre problème connu ni aucune nouvelle fonctionnalité planifiée pour la version 1.0.0
de Paging. Veuillez mettre à niveau vos projets pour utiliser la version 1.0.0-rc1
et nous aider à mettre cette version à l'épreuve afin de publier une version 1.0.0
aussi fiable que possible.
Cette version n'a pas été modifiée. Elle est identique à la version 1.0.0-beta1
.
Room
Correction de bugs
- Correction d'une erreur de compilation lorsqu'un POJO Kotlin fait référence à une entité relationnelle définie en Java. b/78199923
5 avril 2018
Publication de Room 1.1.0-beta2
, Paging 1.0.0-beta1
et Paging RxJava 1.0.0-alpha1
.
Paging sera disponible en version bêta pendant une courte période avant d'être proposé en version admissible.
Nous ne prévoyons pas d'autres modifications de l'API pour Paging 1.0
. Les critères de modification de l'API sont très élevés.
La prise en charge de la version alpha de RxJava2 pour Paging est fournie par le biais d'un module facultatif distinct (android.arch.paging:rxjava2:1.0.0-alpha1
). La gestion des versions restera séparée jusqu'à la stabilisation.
Cette nouvelle bibliothèque fournit une alternative RxJava2 à LivePagedListBuilder
, capable de construire des éléments Observable
et Flowable
, en acceptant des Scheduler
au lieu d'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
Nouvelles fonctionnalités
- Ajout de
RxPagedListBuilder
via le nouvel artefactandroid.arch.paging:rxjava2
.
Modifications apportées à l'API
Modifications de l'API visant à clarifier le rôle des exécuteurs dans les compilateurs :
setBackgroundThreadExecutor()
renommésetFetchExecutor()
(dansPagedList.Builder
etLivePagedListBuilder
).setMainThreadExecutor()
renommésetNotifyExecutor()
(dansPagedList.Builder
).
Correction du membre
PagedList.mCallbacks
, défini comme privé.
Correction de bugs
LivePagedListBuilder
déclenche le chargement initial dePagedList
sur l'exécuteur spécifié, plutôt que sur le pool de threads des composants d'architecture d'E/S.Correction du comportement d'invalidation des wrappers
DataSource
internes (utilisés pour implémenterDataSource.map
, ainsi que pour le chargement de laPositionalDataSource
avec espaces réservés désactivés). b/77237534
Room
Correction de bugs
Correction d'un bug critique dans les implémentations
Single
etMaybe
Rx de Room, dans lesquelles la requête était recyclée à l'avance, causant des problèmes si vous ajoutiez plus d'un observateur aux instancesSingle
ouMaybe
renvoyées. b/76031240RoomDatabase.clearAllTables n'exécute pas
VACUUM
dans la base de données si elle est appelée dans une transaction. b/77235565
21 mars 2018
Publication de Room 1.1.0-beta1
, Paging 1.0.0-alpha7
et Lifecycles 1.1.1
.
Room
Modifications apportées à l'API
- Sur la base des commentaires relatifs à l'API,
@RawQuery
n'accepte plus la transmission d'uneString
comme paramètre de requête. Vous devez utiliser SupportSQLiteQuery. (Consultez SimpleSQLiteQuery pour créer facilement une instance de SupportSQLiteQuery compatible avec les arguments.) - La méthode fallbackToDestructiveMigrationFrom de "RoomDatabase.Builder" accepte désormais
vararg int
au lieu devararg Integer
.
Correction de bugs
RoomDatabase.clearAllTables tente maintenant de renvoyer de l'espace au système d'exploitation en définissant un point de contrôle WAL et en ajoutant une exécution de
VACUUM
à la base de données.@RawQuery
accepte désormais n'importe quel POJO pour la propriétéobservedEntities
, à condition que le POJO fasse référence à une ou plusieurs entités via ses champsEmbedded
ou sesRelation
. b/74041772Paging : l'implémentation d'une "DataSource" de Room gère désormais correctement les dépendances multitables (telles que les relations et les jointures). Auparavant, la génération de nouveaux résultats ou l'exécution d'une compilation échouaient. b/74128314
Lifecycles
Un seul petit changement : android.arch.core.util.Function
est déplacée de arch:runtime
vers arch:common
. Cela permet de l'utiliser sans dépendance d'exécution, par exemple dans paging:common
ci-dessous.
lifecycle:common
est une dépendance de lifecycle:runtime
. Par conséquent, ce changement n'affecte pas lifecycle:runtime
directement, uniquement les modules qui dépendent directement de lifecycle:common
, comme Paging.
Paging
Publication de Paging 1.0.0-alpha7
parallèlement à Lifecycles 1.1.1
. Étant donné que la version alpha7 de Paging dépend du déplacement de la classe Function
mentionnée ci-dessus, vous devrez mettre à jour votre dépendance lifecycle:runtime
vers android.arch.lifecycle:runtime:1.1.1
.
La version alpha7
de Paging est la dernière version prévue avant le passage en phase bêta.
Modifications apportées à l'API
- Ajout d'un constructeur public pour les objets
DataSource.LoadParams
. Les objetsDataSource.LoadCallback
sont désormais abstraits. Ces changements permettent d'encapsuler uneDataSource
ou de tester directement uneDataSource
avec un rappel fictif. b/72600421 - Mappers pour DataSource et DataSource.Factory
map(Function<IN,OUT>)
permet de transformer, d'encapsuler ou de décorer les résultats chargés par uneDataSource
.mapByPage(<List<IN>,List<OUT>>)
offre les mêmes possibilités pour le traitement par lot (par exemple, si des éléments chargés via SQL doivent également interroger une base de données distincte, cette opération peut être effectuée par lot).
- Ajout de
PagedList#getDataSource()
comme méthode pratique. b/72611341 - Suppression de toutes les classes obsolètes de l'API, y compris les parties restantes du package
recyclerview.extensions
et leLivePagedListProvider
. - Passage de
DataSource.Factory
(précédemment une interface) en classe abstraite afin de prendre en charge la fonctionnalité de carte.
Correction de bugs
- Modification des compilateurs pour qu'ils deviennent finaux. b/70848565
- Correction de l'implémentation
DataSource
de Room afin de traiter les requêtes multitables. (Correctif inclus dans la version 1.1.0-beta1 de Room, voir ci-dessus.) - Correction d'un bug qui empêchait l'appel de
BoundaryCallback.onItemAtEndLoaded
pourPositionalDataSource
si les espaces réservés étaient activés et que la taille totale était un multiple exact de la taille de la page.
2 mars 2018
Publication de Room 1.1.0-alpha3
. Il s'agit de la dernière version alpha prévue pour Room 1.1.0
.
Modifications apportées à l'API
Les méthodes
addObserver
etremoveObserver
d'InvalidationTracker sont maintenant synchrones et doivent être appelées sur un thread autre qu'un thread UI. Cela permet d'éviter certaines conditions de concurrence lors de l'observation des tables.Il existe une nouvelle méthode
clearAllTables()
pour la classe RoomDatabase qui tronquera l'ensemble du contenu de la table. b/63807999SupportSQLiteQuery
dispose désormais d'une méthodegetArgCount()
qui renvoie le nombre de paramètres de requête. b/67038952
Correction de bugs
@RawQuery
est désormais correctement prise en charge pour les requêtes de Paging. b/72600425Désormais, Room nomme correctement les classes
Dao
générées pour éviter les conflits de noms lorsque deux interfacesDao
ou plus sont des classes internes d'un même package et portent le même nom. b/73536380Les types de champs génériques dans
Pojo
sont correctement analysés en tant que membre de la classe d'extension. b/73534868Les paramètres de requête dans les interfaces
Dao
héritées des artefacts de dépendance sont désormais correctement analysés. b/68118746Les requêtes générées pour
@Relation
permettent désormais d'échapper correctement les noms de champs. b/70925483
27 février 2018
Publication de Paging 1.0.0-alpha6
en parallèle de la version 27.1.0 de la bibliothèque Support.
ListAdapter
et quelques classes associées ont été déplacés directement de la bibliothèque Paging vers Recyclerview, avec quelques changements de noms pour que la fonction de certaines classes soit plus claire. Cette version alpha de Paging est probablement la dernière à apporter des modifications significatives à l'API.
Modifications apportées à l'API
- Classes déplacées vers recyclerview-v7 :
ListAdapter
- Classes renommées et déplacées vers recyclerview-v7 :
ListAdapterHelper
->AsyncListDiffer
ListAdapterConfig
->AsyncDifferConfig
DiffCallback
->DiffUtil.ItemCallback
- Classes renommées dans "paging-runtime" :
PagedListAdapterHelper
->AsyncPagedListDiffer
Les classes déplacées étaient utiles avec RecyclerView, indépendamment de la bibliothèque Paging. Cela signifie qu'elles peuvent être utilisées sans dépendre d'une version alpha de Paging, mais aussi que les applications qui utilisent Paging doivent être mises à niveau vers la version Alpha 6 et la version 27.1.0 de la bibliothèque Support en même temps.
** Guide de migration pour Paging Alpha6 : **
- Mise à jour des dépendances de Paging et RecyclerView vers
android.arch.paging:runtime:1.0.0-alpha6
etcom.android.support:recyclerview-v7:27.1.0
.- Ces opérations doivent être effectuées simultanément, car "ListAdapter" a été déplacé de Paging vers RecyclerView.
- Remplacement de toutes les références de
ListAdapterHelper
parAsyncListDiffer
.- Suppression de
getItem(index)
/getItemCount()
en faveur du schéma d'appel degetCurrentList().getItem(index)
et degetCurrentList().size()
, qui sont plus explicites.
- Suppression de
- Remplacement de toutes les références de
ListAdapterConfig
parAsyncDifferConfig
. - Remplacement de toutes les références de
DiffCallback
parDiffUtil.IttemCallback
. - Remplacement de toutes les références de
PagedListAdapterHelper
parAsyncPagedListDiffer
. - Remplacement des références de
setList()
parsubmitList()
.- Modification du nom pour clarifier la nature asynchrone de la vérification différentielle (diffing) de liste.
Correction de bugs
- Correction de la transmission d'une position initiale incorrecte au chargement initial lorsque les espaces réservés sont désactivés. b/73513780
15 février 2018
Publication de Room 1.1.0-alpha2
.
Nouvelles fonctionnalités
Il est désormais possible d'ouvrir une base de données en mode écrit avant journalisation dans Room. Dans ce mode, vos écrits ne bloquent plus vos requêtes de lecture. Même s'il consomme plus de mémoire (en raison de plusieurs connexions), ce mode est généralement plus rapide. Par défaut, Room utilise WAL si l'appareil est au niveau d'
API 16
ou supérieur et s'il n'est pas un appareil à faible mémoire. Vous pouvez contrôler ce comportement en utilisant la méthodesetJournalMode()
sur leRoomDatabase.Builder
. b/67757002Prise en charge de Guava : Room permet désormais de renvoyer Guava
Optional<T>
ouListenableFuture<T>
dans les requêtesDAO
. Pour utiliserListenableFuture<T>
, vous devez importer l'artefactguava
depuis Room (android.arch.persistence.room:guava:1.1.0-alpha2
).Room permet désormais de renvoyer
java.util.Optional<T>
à partir des requêtesDAO
.Les méthodes d'interface avec des implémentations par défaut sont désormais prises en charge par les méthodes
@Transaction
dans les classesDAO
. Cela fonctionne enJava 8
et enKotlin
. b/72416735
Correction de bugs
Les constructeurs avec
@Relation
ne généreront pas d'erreur de compilation si un autre constructeur peut être utilisé. b/72884434Les noms de tables échappés avec
'
dans les méthodes@Query
sont maintenant correctement échappés pour l'outil de suivi d'invalidation. b/72366965Room utilise désormais les annotations
@Metadata
de Kotlin pour lire la structure des classes lors du traitement des annotations. Cela signifie que même si un POJO est hérité à partir d'une dépendance, ses noms de paramètres de constructeur peuvent être lus correctement. b/67181813Correction d'un problème lié à la recherche de chemins d'accès de migration vers une version antérieure. b/72153525
Les types de colonnes autres que ceux par défaut sont maintenant correctement gérés lors de la migration d'une base de données existante vers Room. b/71953987
Room gère désormais correctement les champs
boolean?
persistants dans les classes Kotlin. b/72786402
22 janvier 2018
Publication de Lifecycles 1.1.0
, Room 1.1.0-alpha1
et Paging 1.0.0-alpha5
.
Lifecycle 1.1.0
Modifications apportées aux packages
De nouvelles dépendances bien plus petites sont désormais disponibles :
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
Modifications apportées à l'API
- Les
LifecycleActivity
etLifecycleFragment
obsolètes ont été supprimés. Veuillez utiliserFragmentActivity
ouAppCompatActivity
, ou assurez-vous queFragment
est compatible. - Ajout des annotations
@NonNull
àViewModelProviders
etViewModelStores
. - Abandon du constructeur
ViewModelProviders
. Veuillez utiliser ses méthodes statiques directement. - Abandon de
ViewModelProviders.DefaultFactory
. Veuillez utiliserViewModelProvider.AndroidViewModelFactory
. - Ajout de la méthode
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
statique pour récupérer uneFactory
statique adaptée à la création d'instancesViewModel
etAndroidViewModel
.
Room 1.1.0-alpha1
Nouvelles fonctionnalités
RawQuery
: cette nouvelle API permet aux méthodes@Dao
de recevoir le SQL en tant que paramètre de requête. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: cette nouvelle API deRoomDatabase.Builder
permet un contrôle plus précis des versions de schéma de départ à partir desquelles les migrations destructives sont autorisées (en comparaison avec la méthode "fallbackToDestructiveMigration"). b/64989640- Room ne prend désormais en charge que les API Paging les plus récentes (alpha-4 et ultérieures) et abandonne la prise en charge du
LivePagedListProvider
obsolète. Pour utiliser la nouvelle version alpha de Room, vous devez utiliser Pagingalpha-4
ou version ultérieure et passer deLivePagedListProvider
àLivePagedListBuilder
si vous ne l'avez pas déjà fait.
Correction de bugs
- Meilleure compatibilité avec les types Kapt de Kotlin. b/69164099
- L'ordre des champs n'invalide plus le schéma. b/64290754
Paging 1.0.0-alpha5
Correction de bugs
- Correction d'un problème de chargement de page survenant lorsque les espaces réservés sont désactivés. b/70573345
- Ajout d'une fonction de journalisation supplémentaire pour localiser le bug "IllegalArgumentException". b/70360195 (et correction potentielle côté Room)
- Correction des exemples de code Javadoc. b/70411933 et b/71467637
11 décembre 2017
Publication de Paging alpha4-1
. Il s'agit d'une petite version corrigée de Paging alpha 4.
Correction de bugs
- Aucune vérification des paramètres de rappel pour les sources de données non valides. b/70353706, b/70360195
7 décembre 2017
Publication de Paging alpha4
, avec des modifications et des ajouts significatifs, qui ciblent principalement le réseau, ainsi que les cas d'utilisation de réseau + base de données.
Modifications apportées à l'API
DataSource
est désormais une API asynchrone permettant de faciliter la pagination directement à partir du réseau :- Point d'entrée unique pour la taille et les données initiales.
- Conservation du rappel et envoi ultérieur pour la prise en charge de nouvelles tentatives du réseau.
- Les rappels de threads sûrs permettent un chargement asynchrone pour la création d'un seul réseau basé sur
PagedList
dans le thread UI. - Comportement plus clair des erreurs liées aux paramètres de chargement initiaux.
TiledDataSource
renomméePositionalDataSource
afin de refléter son indexation basée sur la position et le fait qu'elle ne soit pas disposée en mosaïque lorsque les espaces réservés sont désactivés.Ajout de
PageKeyedDataSource
pour prendre en charge les jetons suivants/précédents intégrés aux chargements de page de réseau.KeyedDataSource
renomméeItemKeyedDataSource
pour indiquer clairement la différence.LivePagedListBuilder
etDataSource.Factory
remplacentLivePagedListProvider
. Le compilateur fournit la même fonctionnalité avec davantage de personnalisation et des valeurs par défaut plus simples. La fabrique autorise le code de générationDataSource
à rester indépendant deLiveData
.Ajout de
PagedList.BoundaryCallback
pour le cas d'utilisation de base de données + réseau.Le constructeur
PagedList.Builder
, qui est désormais plus semblable àLivePagedListBuilder
, accepteDataSource
+PagedList.Config
. Il permet d'utiliser l'opérateur losange en langage Java ou les types inférés en Kotlin.Ajout de
PagedList.getConfig()
.PagedList.Config
possède désormais des propriétés publiques.KeyedDataSource.loadBefore()
ne s'attend plus à ce que les résultats soient inversés.Ajout de
PagedListAdapter.onCurrentListChanged()
pour identifier les mises à jour sur lesquelles "PagedList" est affichée.
Correction de bugs
- Correction de "IndexOutOfBoundsException" dans "PagedListAdapter(Helper)". b/67883658
Version 1.0.0 – 6 novembre 2017
Tous les principaux composants (sauf Paging) sont désormais à la version 1.0.0
. Il s'agit exactement de la même version que rc1
, à l'exception d'une modification apportée à la bibliothèque reactivestreams
.
Correction de bugs
- Désormais,
LiveDataReactiveStreams
implémente correctement la spécification Flux réactifs. b/67999342
Version admissible – 18 octobre 2017
Tous les principaux artefacts (sauf Paging) sont désormais à la version 1.0.0-rc1
.
Nous n'avons aucun autre problème connu ni aucune nouvelle fonctionnalité planifiée pour la version 1.0.0
. Veuillez mettre à jour vos projets pour utiliser la version 1.0.0-rc1
et nous aider à mettre cette version à l'épreuve afin de publier une version 1.0.0
aussi fiable que possible.
Nouveau comportement
- Dans cette version,
Lifecycle.Event#ON_STOP
est désormais envoyé lorsqueonSaveInstanceState
est appelé. Auparavant, il était simplement marqué commeCREATED
sans l'envoi deON_STOP
. Pour en savoir plus, consultez la documentation sur Lifecycles.
Correction de bugs
Room :
- Room dépend maintenant du dernier artefact "xerial" qui corrige les problèmes de
OutOfMemory
lors de la compilation. b/62473121 - Les méthodes
Query
peuvent désormais être annotées avec@Transaction
. Pour en savoir plus, consultez la documentation de référence sur@Transaction
. b/65112315 - La classe
StringUtil
de Room est supprimée de l'API publique (elle n'a jamais été conçue comme une API publique).
- Room dépend maintenant du dernier artefact "xerial" qui corrige les problèmes de
Lifecycles :
LiveData
fonctionne correctement lorsque Activity est partiellement couverte sur les niveaux d'API inférieurs à 24. b/65665621Les méthodes
OnLifecycleEvent
dans les classes parentes sont désormais correctement appelées. Si cela n'est pas possible, un avertissement s'affiche lors de la compilation. b/63474615Lifecycle retient désormais un
WeakReference
à son LifecycleOwner pour éviter les fuites LifecycleOwner si Lifecycle est conservé plus longtemps en mémoire que d'habitude (il s'agit simplement d'une précaution, veillez à ne pas fuite leLifecycle
).
9 octobre 2017
Publication de Paging alpha-3
, qui devient compatible avec la version beta 2
de Lifecycles et Room.
Correction de bugs
- Amélioration de la documentation sur Paging.
5 octobre 2017
Tous les principaux artefacts (sauf Paging) sont désormais à la version beta 2
.
Elle ne comprend pas de nouvelle version de Paging.
Correction de bugs
Lifecycles :
- Désormais,
LiveDataReactiveStreams
se désabonne correctement de l'éditeur source lorsqueLiveData
n'est pas actif. b/62609183 - Les événements de cycle de vie sont correctement propagés vers les classes parentes lorsque la classe parente provient d'un autre module. b/63474615
- "LiveData" gère correctement les observateurs qui se désabonnent lors de la création d'un abonnement. b/66337741
FullLifecycleObserver
pour l'artefact de langage Java 8 est désormais disponible dans l'arborescence des dépendances. b/66525578Dans le cas de ProGuard, veuillez ajouter les lignes suivantes à votre fichier ProGuard. (Ce ne sera pas nécessaire lorsque la version 1.0.0 sera disponible.)
-keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
- Désormais,
Room :
- Room affiche désormais une erreur au moment de la compilation lorsque le POJO renvoyé dans une méthode
@Query
comporte un champ@NonNull
qui ne correspond à aucune des colonnes de la réponse à la requête. Si le champ est@Nullable
, Room affiche uniquement un avertissement. b/67115337 - Room valide désormais les index dans les versions plus récentes du système d'exploitation. b/63132683
- Room sélectionne le constructeur sans argument par défaut s'il existe plusieurs constructeurs correspondants dans un POJO. b/67353427
- Les clés primaires d'une seule colonne peuvent être
Nullable
s'il s'agit d'unInteger
ouLong
. b/67086876 - L'outil de suivi de l'invalidation gère correctement le retour en mode test. b/65471397
- Room vérifie maintenant les caractères non valides dans les noms de colonnes et de tables au moment de la compilation (caractères non valides :
`
et"
). b/64749111
- Room affiche désormais une erreur au moment de la compilation lorsque le POJO renvoyé dans une méthode
21 septembre 2017
Dans cette version, tous les modules de composants d'architecture atteignent au moins la version beta 1
(sauf la nouvelle bibliothèque Paging, qui est en version alpha 2
).
Nous ne prévoyons pas d'autres modifications de l'API. Des modifications non planifiées peuvent survenir, mais les critères de modification de l'API avant la version 1.0.0
stable sont très élevés. Cela est donc improbable.
- "LifecycleActivity" et "LifecycleFragment" seront supprimés avant la version
1.0.0
stable. Ils ne sont pas nécessaires si vous utilisez la bibliothèque Support26.1.0
ou version ultérieure.
Contrairement à la phase alpha, la phase bêta est prévue pour être de très courte durée.
Modifications apportées à la version
- Les extensions de Lifecycle et Room sont désormais à la version
beta 1
. - Paging est désormais à la version
alpha 2
- Aucune modification n'a été apportée à Lifecycles (environnement d'exécution, commun) et à Arch Core (commun). Ces deux artefacts sont à la version
1.0.0
depuis le 13 septembre.
Nouveaux artefacts
Lifecycles dispose désormais d'un nouvel artefact appelé
common-java8
. Cet artefact contient une nouvelle interface appelée DefaultLifecycleObserver, qui dispose d'implémentations par défaut pour toutes les méthodes de Lifecycle. Si vous utilisez le langage Java 8, vous devez privilégier cet artefact plutôt que les annotations.- En raison d'un bug dans la version
beta1
, vous devez ajouter une dépendance explicite au moduleandroid.arch.lifecycle:common:1.0.1
pour utiliser le nouvel artefactcommon-java8
. Ce problème sera corrigé dans la versionbeta2
.
- En raison d'un bug dans la version
Modifications apportées aux packages
android.arch.persistence.room.db
a été déplacé versandroid.arch.persistence.db
.android.arch.persistence.room.db-impl
a été déplacé et renomméandroid.arch.persistence.db-framework
Ces deux artefacts sont déjà une dépendance de Room. Par conséquent, vous ne devriez pas avoir à modifier vos fichiers de compilation sauf si vous les utilisez directement.
Modifications apportées à l'API
Room :
- L'annotation @ColumnInfo permet désormais de définir une compilation sur la colonne. b/62007004
- Les champs
transient
sont désormais ignorés par défaut, sauf s'ils sont annotés avec@ColumnInfo
,@Embedded
ou@Relation
. b/62600692 - Les clés primaires doivent être annotées avec
@NonNull
, sauf si elles sont générées automatiquement. b/64292391- Cette modification peut nécessiter une migration de schéma. Veuillez nous excuser pour ce désagrément.
- Ajout d'une nouvelle annotation pratique (@Transaction) qui remplace une méthode
DAO
et l'exécute dans une transaction.
Compatibilité avec la base de données SQLite :
- Modifications apportées à l'API dans la configuration de la base de données. b/65349673 b/65499876
Paging :
- Amélioration de la documentation sur Paging avec plus d'exemples et d'annotations de thread.
Correction de bugs
- Room :
- Les chaînes multilignes Kotlin dans les méthodes
@Query
sont gérées correctement. b/65809374
- Les chaînes multilignes Kotlin dans les méthodes
- Paging :
- L'artefact Paging ne dépend plus de JUnit. b/65690261
Version 1.0.0 Alpha 9-1 – 13 septembre 2017
Il s'agit d'une version majeure dans laquelle les principaux artefacts de Lifecycle (environnement d'exécution, commun) et d'Arch Core (commun) atteignent la version 1.0.0
stable.
Parallèlement à ce changement, la bibliothèque Support 26.1.0 dépend désormais de ces bibliothèques. AppCompatActivity et Support Fragment implémentent désormais l'interface LifecycleOwner.
Cette version dépend également de la bibliothèque Support 26.1.0
pour profiter de la nouvelle intégration.
Nouvelle bibliothèque : Paging
Cette version comprend également une nouvelle bibliothèque appelée Paging, qui permet de charger facilement des ensembles de données volumineux dans une RecyclerView en segments, si nécessaire. Paging est publié en version alpha1
et aura son propre cycle de publication.
Modifications apportées à l'API
- Les classes suivantes sont obsolètes et seront supprimées dans une prochaine version :
Correction de bugs
Les classes générées sont désormais annotées avec
@Generated
si l'annotation est incluse dans le chemin de classe de l'application. (b/35754819).Correction du bug de comparaison de l'observateur de "MediatorLiveData". b/64413274
Les requêtes SQLite
WITH
sont désormais compatibles avec [LiveData]. [ref-LiveData] b/62510164Correction d'un bug qui empêchait InvalidationTracker d'envoyer la bonne liste si plusieurs tables étaient observées. b/65099281
Correction d'un bug provoquant la génération par Room de fichiers différents sous Windows. b/64470691
Les "LifecycleObservers" du package racine sont désormais pris en charge. b/62310817
Version 1.0.0 Alpha 9 – 16 août 2017
Correction de bugs
- Correction d'un bug dans LiveData, où le second observateur était ignoré lorsque le premier observateur était supprimé de sa méthode
onChanged
. b/64285805
Version 1.0.0 Alpha 8 – 1er août 2017
Nouveaux comportements
- Ajout de la contrainte
NOT NULL
pour les colonnes de types primitifs ou avec l'annotation NonNull. Cela modifie la structure de vos tables. Par conséquent, si vous utilisez déjà les composants d'architecture alpha 7 ou version antérieure, vous devez implémenter une migration si vous souhaitez conserver les données ou utiliser la méthodefallbackToDestructiveMigration()
dans le compilateur. b/62007004
Modifications apportées à l'API
- SupportSQLiteProgram étend désormais AutoCloseable. b/63131997
Version 1.0.0 Alpha 7 – 26 juillet 2017
Correction de bugs
Correction d'un bug critique dans la méthode LifecycleRegistry
removeObserver
, qui empêchait le nouvel ajout de LifecycleObserver.Correction de "InvalidationTracker" pour les bases de données personnalisées. b/63162311
Version 1.0.0 Alpha 6 – 25 juillet 2017
Nouveaux comportements
Modification de l'ordre des appels de LifecycleObserver. Auparavant, les observateurs étaient toujours appelés dans l'ordre de leur ajout : si
observer1
était ajouté avantobserver2
, il recevaitON_CREATE
et tous les autres événements avantobserver2
. Ce n'est plus le cas des événements de destruction, car les observateurs sont appelés dans l'ordre inverse de l'ajout. Comportement actuel : siobserver1
est ajouté avantobserver2
,ON_CREATE
est d'abord envoyé àobserver1
, puis àobserver2
(il en va de même pourON_START
etON_RESUME
), mais l'événementON_PAUSE
est d'abord envoyé àobserver2
et ensuite àobserver1
(idem pourON_STOP
etON_DESTROY
).Room génère une exception si la migration est manquante. Auparavant, Room effaçait simplement la base de données, mais cela entraîne actuellement un plantage. Les développeurs peuvent activer ce comportement en appelant l'API du compilateur. b/63872392
Modifications apportées à l'API
Ajout de la méthode
fallbackToDestructiveMigration()
àRoomDatabase.Builder
pour effacer la base de données si la migration est manquante. b/63872392Les composants d'architecture dépendent désormais de la bibliothèque Support 26.0.0.
Correction de bugs
Correction de la gestion de la @Relation imbriquée dans @Embedded. b/63736065
Correction des migrations de test pour les tables avec une clé primaire incrémentée automatiquement. b/63393618
Désormais, les @Queries qui exécutent des requêtes "DELETE" ou "UPDATE" reçoivent correctement des arguments. b/63872538
Désormais, les ViewModels sont conservés lorsque le fragment propriétaire se trouve dans la pile "Retour" et que la configuration est modifiée deux fois. b/38445801
Version 1.0.0 Alpha 5 – 18 juillet 2017
Modifications apportées à l'API
Ajout d'une nouvelle méthode de rappel dans
RoomDatabase.Builder
pour observer la création ou l'ouverture d'une base de données. b/62699324@Query peut désormais renvoyer RxJava
Maybe
ouSingle
. b/62231019
Vous devez dépendre de l'artefact android.arch.persistence.room:rxjava2
pour ajouter la prise en charge de RxJava dans Room.
Correction de bugs
Correction des requêtes
@Delete
sans paramètres. b/63608092Correction des vérifications de type de Room pour les fonctions "getter" et "setter". b/63733651
Version 1.0.0 Alpha 4 – 11 juillet 2017
Modifications apportées à l'API
Ajout d'une nouvelle méthode pratique (
runInTransaction()
) à RoomDatabase.Les méthodes
@Insert
,@Delete
et@Update
peuvent maintenant comporter des paramètres de différents types d'entités. b/62682405
Correction de bugs
Correction de la gestion de
byte[]
dans les méthodes@Dao
. b/62460045La vérification de la migration dans Room utilise désormais une comparaison non sensible à la casse. b/62875382
Correction de la configuration ProGuard pour l'artefact Lifecycles. b/62113696
Version 1.0.0 Alpha 3 – 15 juin 2017
Modifications apportées à l'API
Désormais,
@OnLifecycleEvent
ne prend en charge qu'un seul paramètre d'événement. Cette modification vise à préparer la prise en charge de Java 8 afin que nous puissions migrer vers des interfaces avec les méthodes par défaut à l'avenir. En ce qui concerne cette modification, seules les méthodes annotées@OnLifecycleEvent(ON_ANY)
peuvent recevoir un deuxième paramètre de typeEvent
(le premier paramètre est leLifecycleOwner
). Pour en savoir plus, consultez la documentation sur Lifecycle.Les classes
LifecycleActivity
etLifecycleFragment
sont déplacées dans l'artefactandroid.arch.lifecycle:extensions
.MigrationTestHelper reçoit l'instance Instrumentation au lieu de
Context
pour lire le schéma à partir des ressources de test et créer la base de données dans le contexte de l'application.Les annotations
@Insert
,@Delete
et@Update
dans les méthodes@DAO
peuvent désormais comporterIterable
comme type de paramètre. b/62259820
Correction de bugs
Les méthodes remplacées par des événements de cycle de vie ne sont plus appelées plusieurs fois.
Plusieurs paramètres
IN
sont désormais gérés correctement. b/62608681Les classes DAO abstraites peuvent maintenant comporter un constructeur qui reçoit l'instance
@Database
. b/38488747Les
DAO
peuvent désormais comporter une super-classe/interface avec des paramètres de type. b/62103620
Version 1.0.0 Alpha 2 – 2 juin 2017
Modifications apportées à l'API
Le rappel InvalidationTracker reçoit désormais la liste des noms de tables modifiés. (b/38468740)
Réduction de la surface d'API de la classe SupportSQLiteDatabase. (b/38481640)
Correction de bugs
- Fichiers ProGuard pour les cycles de vie. (b/62113696)
- Perte de données avec les convertisseurs de type. (b/62100716)
- Autorisation du renvoi de
Long[]
à partir des requêtes@Insert
.
Version 1.0.0 Alpha 1 – 17 mai 2017
MinSDK : 14
Recommandations générales
Nous avons effectué de nombreux tests avant le lancement, mais les composants d'architecture sont actuellement en version alpha. Si vous créez une application de production, sachez que l'API sera modifiée avant la version 1.0 et risque de ne pas être totalement stable. Si vous ne souhaitez pas déboguer les problèmes des bibliothèques que vous utilisez, nous vous recommandons de tester d'abord les composants d'architecture dans des projets secondaires.
Nous ne recommandons pas de migrer tous les utilisateurs dès aujourd'hui. Un guide de migration sera disponible pour la version 1.0 des composants d'architecture.
Limites et problèmes connus
Fragment
etActivityCompat
de Lifecycle dans la bibliothèque Support n'implémentent pas encore l'interfaceLifecycleOwner
. Ils le feront lorsque les composants d'architecture auront atteint la version 1.0.0.