Archive des notes de version des composants d'architecture

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 de Room au lieu de 1.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

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ément menuCategory="secondary" ne s'affichent plus dans la pile "Retour" lorsqu'ils sont utilisés avec les méthodes NavigationUI (b/120104424).
  • AppBarConfiguration vous permet désormais de définir une instance OnNavigateUpListener de remplacement qui sera appelée lorsque navController.navigateUp() renvoie false. (b/79993862) (b/120690961)

Modifications destructives

  • Lorsque vous utilisez un <argument> avec un argType="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éthodes setup. Ajoutez menuCategory="secondary" à votre MenuItem pour éviter l'affichage de la pile "Retour" (aosp/852869).
  • Les méthodes fromBundle() des classes Args générées prennent maintenant une valeur de Bundle non nulle au lieu d'une valeur de Bundle 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 de ListenableWorker. Cela permet d'éviter les conflits de refactorisation avec la classe Result 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 de ListenableWorker.

6 décembre 2018

Paging

Publication de Paging 2.1.0-rc01 sans aucune modification par rapport à la version 2.1.0-beta01.

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 votre android: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 le Bundle des arguments (aosp/837142).
  • Les attributs app:clearTask et app:launchDocument, ainsi que les méthodes associées, ont été supprimés. Utilisez app: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éma Builder et permet de définir n'importe quel indicateur Intent.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 et AppBarConfiguration, sont devenues final (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 à une FragmentFactory (b/119054429).
  • Le constructeur de NavGraphNavigator n'utilise plus de Context (aosp/835340).
  • NavigatorProvider est désormais une classe plutôt qu'une interface. Aucune modification des fonctionnalités du NavigatorProvider renvoyé par getNavigatorProvider() (aosp/830660).
  • NavDestination.navigate() a été supprimé. Appelez plutôt navigate() sur Navigator (aosp/830663).
  • Refactorisation significative de Navigator, qui n'a plus besoin de OnNavigatorNavigatedListener. À la place, navigate renvoie la NavDestination vers laquelle il a navigué.
  • Les instances de Navigator ne peuvent plus envoyer d'événements d'affichage au NavController. Envisagez d'utiliser un OnBackPressedCallback pour intercepter les pressions sur le bouton "Retour" et appeler navController.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 appelant toString() (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, introduit RxWorker. Il s'agit d'un ListenableWorker qui attend une Single<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 via Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) et Result.retry(). Vos ListenableFuture génèrent désormais un Result au lieu d'une Payload. Les Worker n'ont pas de méthodes "getter" et "setter" pour les Data de sortie. Il s'agit d'une modification destructive.
  • Ajout de Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit), de Constraints.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() et ListenableFuture.await().
  • Changement de nom : Operation.getException() devient Operation.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 et OneTimeWorkRequest afin de simplifier l'API. Vous pouvez encapsuler vos varargs existants avec Arrays.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éthodes combine 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é par observeForever et suivi par WorkManager. Il s'agit d'un rétroportage d'une correction de la bibliothèque Room. b/74477406
  • Data.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() renvoie WorkInfo avec le State CANCELLED pendant ListenableWorker.onStopped().
  • Traitement des Result null comme des échecs dans ListenableWorker. 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 via Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) et Result.retry(). Vos ListenableFuture génèrent désormais un Result au lieu d'une Payload. Les Worker n'ont pas de méthodes "getter" et "setter" pour les Data de sortie.
  • Ajout des méthodes d'extension Kotlin Operation.await() et ListenableFuture.await().
  • Changement de nom : Operation.getException() devient Operation.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 et OneTimeWorkRequest afin de simplifier l'API. Vous pouvez encapsuler vos varargs existants avec Arrays.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éthodes combine 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 dans FtsOptions 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 charge ListenableFuture 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 expression IN. 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 nouveau CoroutineWorker.
  • WorkStatus a été renommé WorkInfo. Toutes les variantes correspondantes de la méthode getStatus ont été renommées en variantes correspondantes de getWorkInfo. Il s'agit d'une modification destructive.
  • ListenableWorker.onStopped() n'accepte plus l'argument booléen indiquant si WorkRequest 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() et WorkerParameters.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() et Configuration.getMinJobSchedulerID() sont renommés Configuration.getMinJobSchedulerId() et Configuration.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 des OneTimeWorkRequest uniques en file d'attente sans avoir à créer de WorkContinuation.
  • Toutes les variantes des méthodes enqueue et cancel sur WorkManager renvoient désormais un nouveau type Operation. Il s'agit d'une modification destructive.
  • Toutes les variantes de enqueue n'acceptent plus les varargs pour WorkRequest. Il s'agit d'une modification destructive. Utilisez plutôt des collections. Vous pouvez utiliser Arrays.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 une IllegalStateException. Il s'agit d'une modification destructive.

Correction de bugs

  • Les WorkRequest.Builder de l'artefact work-runtime-ktx utilisent désormais des ListenableWorker. 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éthode getStatus ont été renommées en variantes correspondantes de getWorkInfo.
  • ListenableWorker.onStopped() n'accepte plus l'argument booléen indiquant si WorkRequest 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() et WorkerParameters.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() et Configuration.getMinJobSchedulerID() sont renommés Configuration.getMinJobSchedulerId() et Configuration.getMaxJobSchedulerId(), respectivement.
  • Toutes les variantes des méthodes enqueue et cancel sur WorkManager renvoient désormais un nouveau type d'Operation.
  • Toutes les variantes de enqueue n'acceptent plus les varargs pour WorkRequest.
  • Désormais, les tentatives de initialize WorkManager répétées plus d'une fois par processus entraîneront une IllegalStateException.

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

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 pour PagedList.Config.Builder.
  • Ajout de androidx.paging.PagedList() comme alternative Kotlin pour PagedList.Builder.
  • Ajout de DataSourceFactory.toLiveData() comme alternative Kotlin pour LivePagedListBuilder.
  • Ajout de DataSourceFactory.toObservable() et toFlowable() comme alternatives Kotlin pour RxPagedListBuilder.
  • 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 une PagedList.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 constructeur Worker 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 le ListenableFuture de manière appropriée. Les implémentations de référence des ListenableFuture sont fournies dans le package Futures de la version alpha02 (voir la section WorkManager ci-dessous).
    • Worker étend ListenableWorker et fonctionne comme avant, avec une méthode Result 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ète DefaultWorkerFactory ont été fusionnées dans une classe abstraite appelée WorkerFactory. L'implémentation garantit que le comportement par défaut basé sur la réflexion est appelé en dernier recours pour toutes les instances WorkerFactory créées par l'utilisateur. Il s'agit d'une modification destructive.
  • Suppression de WorkManager.synchronous(), de WorkContinuation.synchronous() et de toutes les méthodes associées. Ajout de ListenableFuture<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 renvoyer void. Il renvoie désormais un ListenableFuture<Void>. Une fois l'opération terminée, vous pouvez appeler ListenableFuture.addListener(Runnable, Executor) ou ListenableFuture.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 contrat Future.
    • Pour conserver la parité avec les méthodes getStatus* synchrones, nous avons fourni des variantes ListenableFuture et renommé les méthodes existantes renvoyant LiveData afin d'inclure explicitement "LiveData" dans le nom (par exemple, getStatusesByIdLiveData(UUID) ). Il s'agit d'une modification destructive de l'API.

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 supprimant exclude '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 était REPLACE. b/116253486 et b/116677275
  • WorkContinuation.combine() accepte désormais une ou plusieurs WorkContinuation 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 constructeur Worker par défaut.
  • L'interface WorkerFactory et l'implémentation concrète DefaultWorkerFactory ont été fusionnées dans une classe abstraite appelée WorkerFactory.
  • Suppression de WorkManager.synchronous() et de WorkContinuation.synchronous().
  • Les méthodes WorkManager.getStatus*() renvoient désormais ListenableFuture. WorkManager.getStatus*LiveData() renvoit LiveData.

Futures

Publication de Futures 1.0.0-alpha02.

Modifications apportées à l'API

  • Les développeurs peuvent désormais utiliser ResolvableFuture et AbstractResolvableFuture comme implémentations concrètes légères de ListenableFuture.

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 Rx Completable, Single<T> et Maybe<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 de RoomDatabase.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/62334005
  • fallbackToDestructiveMigrationOnDowngrade : une nouvelle API de RoomDatabase.Builder permettant de recréer automatiquement la base de données en cas de retour à une version antérieure. b/110416954
  • ignoredColumns : 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 et mDatabase dans RoomDatabase 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

Publication de Navigation 1.0.0-alpha06 avec des corrections de bugs et des modifications apportées à l'API.

Nouvelles fonctionnalités

Modifications apportées à l'API

  • Modification destructive : la méthode navigate() de Navigator utilise désormais un paramètre Navigator.Extras.
  • La méthode getGraph() de NavController est désormais NonNull (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) au Worker 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 une WorkerFactory dans le WorkManager.Configuration. La fabrique de remplacement est DefaultWorkerFactory, ce qui correspond au comportement des versions précédentes de WorkManager.
    • Les constructeurs par défaut pour Worker et NonBlockingWorker sont désormais marqués comme obsolètes. Veuillez utiliser le nouveau constructeur (Worker(Context, WorkerParameters)) et appeler super(Context, WorkerParameters). Les futures versions de WorkManager supprimeront le constructeur par défaut.
  • 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 de NonBlockingWorker.
  • Ajout de la possibilité de déclencher des travaux programmés dans TestDriver via TestDriver.setInitialDelayMet(UUID) et TestDriver.setPeriodDelayMet(UUID). b/113360060

Modifications destructives

  • Les constructeurs Worker et NonBlockingWorker 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 de JobScheduler. 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 dans ConstraintTracker. b/112272753
  • Remplacement des annotations du type renvoyé de Data.getBooleanArray(String) et Data.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) et Data.getIntArray(String) par @Nullable au lieu de @NonNull. b/112275229
  • Extensions de Kotlin : abandon de Map.toWorkData() et ajout d'un workDataOf(vararg Pair<String, Any?>) de niveau supérieur pour plus de cohérence avec les API existantes.

10 août 2018

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 de WorkRequest.Builder#build(). b/111408337
  • Activation de l'utilisation de RescheduleReceiver uniquement lorsque nécessaire pour les WorkRequest. 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 une IllegalStateException. 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 enregistre Log.INFO et les versions ultérieures.
  • Modification de la signature de Data.getString() pour qu'elle ne prenne plus de valeur par défaut (implicitement null). 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 constructeur Constraints, Data.toByteArray() et Data.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 de JobScheduler. 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 la WorkRequest 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 (implicitement null).
  • Marquage de certaines méthodes comme uniquement réservées à une utilisation interne comme @hide. Cela inclut le constructeur Constraints, Data.toByteArray() et Data.fromByteArray(byte[]).

19 juillet 2018

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é par app: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 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 deviendra setDemoControllerIndex. (b/79995048)
    • Par exemple, action_show_settings deviendra actionShowSettings. (b/79642240)
  • 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() et hashCode() (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 desquels PagedListAdapter et AsyncPagedListDiffer 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 et AsyncPagedListDiffer 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 sur AlarmManager.

  • 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/80346526

  • Correction 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/109572353

  • Correction 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 de Room.

Modifications apportées à l'API

  • Ajout de getStatusesSync(), la version synchrone de WorkContinuation.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() renvoie true si un type d'arrêt a été demandé. Worker.isCancelled() renvoie true lorsque le travail a été explicitement annulé. b/79632247

  • Ajout 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 ou AlarmManager. Cela permet d'éviter que WorkManager n'occupe tous les emplacements disponibles de JobScheduler.

  • Ajout de Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), qui permet de définir une plage d'ID de tâches JobScheduler que WorkManager peut utiliser de manière sûre. b/79996760

  • Worker.getRunAttemptCount() renvoie le nombre d'exécutions actuel pour un Worker donné. b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) vous permet de placer des PeriodicWorkRequest uniques en file d'attente. b/79600647

  • WorkManager.cancelAllWork() annule tous les Worker. Les bibliothèques qui dépendent de WorkManager peuvent vérifier quand cette méthode a été appelée pour la dernière fois en utilisant WorkManager.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 du Worker. Cela permet de supprimer des WorkRequest sans tag ou lorsque l'id n'est pas disponible. b/109572351

Modifications destructives

  • Changement de nom : Worker.WorkerResult devient Worker.Result.

  • Worker.onStopped comporte désormais un paramètre isCancelled supplémentaire défini sur true lorsque le Worker a été explicitement annulé.

7 juin 2018

Publication de Navigation 1.0.0-alpha02.

Nouveaux comportements

  • FragmentNavigator utilise désormais setReorderingAllowed(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 dans NavOptions. (b/80338878)

  • Abandon de l'attribut launchDocument pour les actions et l'API associée dans NavOptions. b/109806636

24 mai 2018

Publication de WorkManager 1.0.0-alpha02.

WorkManager

Correction de bugs

  • Correction d'une NullPointerException dans State.isFinished(). b/79550068

  • Correction d'un problème provoquant la reprogrammation de Worker dans Application.onCreate(). b/79660657

  • Correction 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 dans Data. b/79443878

  • Data.Builder.putAll() renvoie maintenant une instance de Builder. b/79699162

  • Documentation 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 un Worker a été arrêté. Worker.onStopped() peut être utilisé pour effectuer des opérations de nettoyage légères.

  • L'API Worker.getTags() renvoie un Set de balises associées au Worker.

  • Ajout de surcharges javax.time.Duration pour les API qui combinent une durée et des TimeUnit. Cela est protégé par @RequiresApi(26).

  • Déplacement des extensions WorkManager du package androidx.work.ktx vers le package androidx.work. Abandon et suppression des anciennes extensions dans une prochaine version.

  • Abandon de Configuration.withExecutor(). Utilisez Configuration.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 artefact android.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() (dans PagedList.Builder et LivePagedListBuilder).

    • setMainThreadExecutor() renommé setNotifyExecutor() (dans PagedList.Builder).

  • Correction du membre PagedList.mCallbacks, défini comme privé.

Correction de bugs

  • LivePagedListBuilder déclenche le chargement initial de PagedList 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émenter DataSource.map, ainsi que pour le chargement de la PositionalDataSource avec espaces réservés désactivés). b/77237534

Room

Correction de bugs

  • Correction d'un bug critique dans les implémentations Single et Maybe 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 instances Single ou Maybe renvoyées. b/76031240

  • RoomDatabase.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

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 champs Embedded ou ses Relation. b/74041772

  • Paging : 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 objets DataSource.LoadCallback sont désormais abstraits. Ces changements permettent d'encapsuler une DataSource ou de tester directement une DataSource 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 une DataSource.
    • 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 le LivePagedListProvider.
  • 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 pour PositionalDataSource 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 et removeObserver 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/63807999

  • SupportSQLiteQuery dispose désormais d'une méthode getArgCount() 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/72600425

  • Désormais, Room nomme correctement les classes Dao générées pour éviter les conflits de noms lorsque deux interfaces Dao ou plus sont des classes internes d'un même package et portent le même nom. b/73536380

  • Les types de champs génériques dans Pojo sont correctement analysés en tant que membre de la classe d'extension. b/73534868

  • Les paramètres de requête dans les interfaces Dao héritées des artefacts de dépendance sont désormais correctement analysés. b/68118746

  • Les 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 et com.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 par AsyncListDiffer.
    • Suppression de getItem(index)/getItemCount() en faveur du schéma d'appel de getCurrentList().getItem(index) et de getCurrentList().size(), qui sont plus explicites.
  • Remplacement de toutes les références de ListAdapterConfig par AsyncDifferConfig.
  • Remplacement de toutes les références de DiffCallback par DiffUtil.IttemCallback.
  • Remplacement de toutes les références de PagedListAdapterHelper par AsyncPagedListDiffer.
  • Remplacement des références de setList() par submitList().
    • 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éthode setJournalMode() sur le RoomDatabase.Builder. b/67757002

  • Prise en charge de Guava : Room permet désormais de renvoyer Guava Optional<T> ou ListenableFuture<T> dans les requêtes DAO. Pour utiliser ListenableFuture<T>, vous devez importer l'artefact guava depuis Room (android.arch.persistence.room:guava:1.1.0-alpha2).

  • Room permet désormais de renvoyer java.util.Optional<T> à partir des requêtes DAO.

  • 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 classes DAO. Cela fonctionne en Java 8 et en Kotlin. 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/72884434

  • Les noms de tables échappés avec ' dans les méthodes @Query sont maintenant correctement échappés pour l'outil de suivi d'invalidation. b/72366965

  • Room 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/67181813

  • Correction 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 et LifecycleFragment obsolètes ont été supprimés. Veuillez utiliser FragmentActivity ou AppCompatActivity, ou assurez-vous que Fragment est compatible.
  • Ajout des annotations @NonNull à ViewModelProviders et ViewModelStores.
  • Abandon du constructeur ViewModelProviders. Veuillez utiliser ses méthodes statiques directement.
  • Abandon de ViewModelProviders.DefaultFactory. Veuillez utiliser ViewModelProvider.AndroidViewModelFactory.
  • Ajout de la méthode ViewModelProvider.AndroidViewModelFactory.getInstance(Application) statique pour récupérer une Factory statique adaptée à la création d'instances ViewModel et AndroidViewModel.

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/71458963
  • fallBackToDestructiveMigrationsFrom : cette nouvelle API de RoomDatabase.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 Paging alpha-4 ou version ultérieure et passer de LivePagedListProvider à 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ée PositionalDataSource 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ée ItemKeyedDataSource pour indiquer clairement la différence.

  • LivePagedListBuilder et DataSource.Factory remplacent LivePagedListProvider. 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ération DataSource à rester indépendant de LiveData.

  • 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, accepte DataSource + 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

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é lorsque onSaveInstanceState est appelé. Auparavant, il était simplement marqué comme CREATED sans l'envoi de ON_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).
  • Lifecycles :

    • LiveData fonctionne correctement lorsque Activity est partiellement couverte sur les niveaux d'API inférieurs à 24. b/65665621

    • Les 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/63474615

    • Lifecycle 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 le Lifecycle).

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 lorsque LiveData 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/66525578

    • Dans 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>(...);}
  • 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'un Integer ou Long. 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

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 Support 26.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 module android.arch.lifecycle:common:1.0.1 pour utiliser le nouvel artefact common-java8. Ce problème sera corrigé dans la version beta2.

Modifications apportées aux packages

  • android.arch.persistence.room.db a été déplacé vers android.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
  • 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

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/62510164

  • Correction 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éthode fallbackToDestructiveMigration() dans le compilateur. b/62007004

Modifications apportées à l'API

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é avant observer2, il recevait ON_CREATE et tous les autres événements avant observer2. 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 : si observer1 est ajouté avant observer2, ON_CREATE est d'abord envoyé à observer1, puis à observer2 (il en va de même pour ON_START et ON_RESUME), mais l'événement ON_PAUSE est d'abord envoyé à observer2 et ensuite à observer1 (idem pour ON_STOP et ON_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/63872392

  • Les 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

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/63608092

  • Correction 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/62460045

  • La 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 type Event (le premier paramètre est le LifecycleOwner). Pour en savoir plus, consultez la documentation sur Lifecycle.

  • Les classes LifecycleActivity et LifecycleFragment sont déplacées dans l'artefact android.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 comporter Iterable 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/62608681

  • Les classes DAO abstraites peuvent maintenant comporter un constructeur qui reçoit l'instance @Database. b/38488747

  • Les 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

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