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
ConcurrentModificationExceptionsur 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
LiveDatautilisées par WorkManager. - Adoption de la dépendance
1.1.1deRoomau 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
MenuItemprésentant l'élémentmenuCategory="secondary"ne s'affichent plus dans la pile "Retour" lorsqu'ils sont utilisés avec les méthodesNavigationUI(b/120104424). AppBarConfigurationvous permet désormais de définir une instanceOnNavigateUpListenerde 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"à votreMenuItempour éviter l'affichage de la pile "Retour" (aosp/852869).- Les méthodes
fromBundle()des classesArgsgénérées prennent maintenant une valeur deBundlenon nulle au lieu d'une valeur deBundlenullable (aosp/845616).
Correction de bugs
- Les arguments sont maintenant correctement analysés à partir des liens profonds, en tant que
argTypecorrect, 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.Resulta été déplacé vers une classe interne deListenableWorker. Cela permet d'éviter les conflits de refactorisation avec la classeResultde niveau supérieur de Kotlin. Il s'agit d'une modification destructive de l'API. b/120564418
Modifications destructives de l'API
androidx.work.Resulta é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:labelpar l'argument approprié (b/80267266). - Navigation dépend désormais de la bibliothèque Support 28.0.0 (b/120293333).
Modifications destructives
OnNavigatedListenera été renomméOnDestinationChangedListener(b/118670572).- Désormais,
OnDestinationChangedListenertransmet également leBundledes arguments (aosp/837142). - Les attributs
app:clearTasketapp:launchDocument, ainsi que les méthodes associées, ont été supprimés. Utilisezapp:popUpToavec la racine de votre graphique pour supprimer toutes les destinations de votre pile "Retour" (b/119628354). ActivityNavigator.Extrasutilise désormais un schémaBuilderet permet de définir n'importe quel indicateurIntent.FLAG_ACTIVITY_(aosp/828140).NavController.onHandleDeepLinka été renomméhandleDeepLink(aosp/836063).- De nombreuses classes et méthodes qui ne sont pas destinées au sous-classement, telles que
NavOptions,NavInflater,NavDeepLinkBuilderetAppBarConfiguration, 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
NavGraphNavigatorn'utilise plus deContext(aosp/835340). - NavigatorProvider est désormais une classe plutôt qu'une interface. Aucune modification des fonctionnalités du
NavigatorProviderrenvoyé 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,navigaterenvoie laNavDestinationvers laquelle il a navigué. - Les instances de
Navigatorne peuvent plus envoyer d'événements d'affichage auNavController. Envisagez d'utiliser unOnBackPressedCallbackpour intercepter les pressions sur le bouton "Retour" et appelernavController.popBackStack()(aosp/833716).
Correction de bugs
popUpTofonctionne 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
IllegalArgumentExceptionlors de l'utilisation de graphiques imbriqués (b/118713731 b/113611083 b/113346925 b/113305559). - L'attribut
dataPatterndes 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
@Overridele 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'unListenableWorkerqui attend uneSingle<Payload>. - Suppression de la compatibilité avec Firebase JobDispatcher en raison de son abandon imminent. Par conséquent, l'artefact
work-firebasene sera plus mis à jour lorsque nous passerons à la version bêta. Nous envisageons d'ajouter une alternative à l'avenir. - Intégration de
PayloadàResult.Resultest 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(). VosListenableFuturegénèrent désormais unResultau lieu d'unePayload. LesWorkern'ont pas de méthodes "getter" et "setter" pour lesDatade 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
ContentUriTriggerset 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,WorkContinuationetOneTimeWorkRequestafin 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éthodescombineexistantes 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.
LiveDataest observé parobserveForeveret 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()renvoieWorkInfoavec leStateCANCELLEDpendantListenableWorker.onStopped(). - Traitement des
Resultnullcomme 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-firebasene sera plus mis à jour lorsque nous passerons à la version bêta. Nous envisageons d'ajouter une alternative à l'avenir. - Intégration de
PayloadàResult.Resultest 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(). VosListenableFuturegénèrent désormais unResultau lieu d'unePayload. LesWorkern'ont pas de méthodes "getter" et "setter" pour lesDatade sortie. - Ajout des méthodes d'extension Kotlin
Operation.await()etListenableFuture.await(). - Changement de nom :
Operation.getException()devientOperation.getThrowable(). - La classe
ContentUriTriggerset 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,WorkContinuationetOneTimeWorkRequestafin 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éthodescombineexistantes 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
tokenizerdans@Fts3/@Fts4utilise 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 dansFtsOptionsen 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,@Deleteou@Updateprennent désormais en chargeListenableFuturecomme 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é
ignoredColumnsde@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
Collectionen 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
RoomDatabasepour 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-ktxintroduit un nouveauCoroutineWorker.WorkStatusa été renomméWorkInfo. Toutes les variantes correspondantes de la méthodegetStatusont été renommées en variantes correspondantes degetWorkInfo. Il s'agit d'une modification destructive.ListenableWorker.onStopped()n'accepte plus l'argument booléen indiquant siWorkRequesta été annulé.WorkManagerne fait plus cette distinction. Il s'agit d'une modification destructive.- Le package
androidx.work.testa été renomméandroidx.work.testing. Il s'agit d'une modification destructive. - Les méthodes "setter" de
Constraintsne 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
WorkStatusne 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 desOneTimeWorkRequestuniques en file d'attente sans avoir à créer deWorkContinuation. - Toutes les variantes des méthodes
enqueueetcancelsurWorkManagerrenvoient désormais un nouveau typeOperation. Il s'agit d'une modification destructive. - Toutes les variantes de
enqueuen'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
initializeWorkManagerrépétées plus d'une fois par processus entraîneront uneIllegalStateException. Il s'agit d'une modification destructive.
Correction de bugs
- Les
WorkRequest.Builderde l'artefactwork-runtime-ktxutilisent désormais desListenableWorker. Corrections b/117666259 - Assurez-vous que la prochaine exécution de
PeriodicWorkse 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
WorkStatusa été renomméWorkInfo. Toutes les variantes correspondantes de la méthodegetStatusont été renommées en variantes correspondantes degetWorkInfo.ListenableWorker.onStopped()n'accepte plus l'argument booléen indiquant siWorkRequesta été annulé.WorkManagerne fait plus cette distinction.- Le package
androidx.work.testa été renomméandroidx.work.testing. - Les méthodes "setter" de
Constraintsne 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
WorkStatusne fait plus partie de l'API publique. Configuration.getMaxJobSchedulerID()etConfiguration.getMinJobSchedulerID()sont renommésConfiguration.getMinJobSchedulerId()etConfiguration.getMaxJobSchedulerId(), respectivement.- Toutes les variantes des méthodes
enqueueetcancelsurWorkManagerrenvoient désormais un nouveau type d'Operation. - Toutes les variantes de
enqueuen'acceptent plus les varargs pourWorkRequest. - Désormais, les tentatives de
initializeWorkManagerré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
@DatabaseViewdans 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
DAOcontenant 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-ktxa été intégré ànavigation-testing artifactet ne sera plus publié. - L'artefact
navigation-testingdispose 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
IndexOutOfBoundsExceptiongé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 constructeurWorkerpar défaut. Il s'agit d'une modification destructive de l'API. NonBlockingWorkera été renomméListenableWorker, qui est maintenant une classe publique non masquée et prête à l'emploi.ListenableWorkerpermet 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 leListenableFuturede manière appropriée. Les implémentations de référence desListenableFuturesont fournies dans le packageFuturesde la versionalpha02(voir la sectionWorkManagerci-dessous).WorkerétendListenableWorkeret 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
ListenableWorkerutilisant des coroutines Kotlin (une fois les versions stables publiées) et RxJava2.
- L'interface
WorkerFactoryet l'implémentation concrèteDefaultWorkerFactoryont é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 instancesWorkerFactorycréé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
ListenableFuturepour 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
ListenableFuturene 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 variantesListenableFutureet renommé les méthodes existantes renvoyantLiveDataafin 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.proen 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
NullPointerExceptionpotentielle dans une condition de concurrence où le travail étaitREPLACE. b/116253486 et b/116677275 WorkContinuation.combine()accepte désormais une ou plusieursWorkContinuationau 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 constructeurWorkerpar défaut. - L'interface
WorkerFactoryet l'implémentation concrèteDefaultWorkerFactoryont é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
ResolvableFutureetAbstractResolvableFuturecomme 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
@Entitypeuvent désormais également être annotées avec@Fts3ou@Fts4pour 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,@Embeddedet@Relationde 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@CopyAnnotationspour que Room puisse les comprendre. b/62408420 - Compatibilité supplémentaire avec les types renvoyés Rx : les méthodes DAO annotées avec
@Insert,@Deleteou@Updatesont 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@Relationpuissent être définis, mais ils peuvent désormais servir de paramètres de constructeur. enableMultiInstanceInvalidationest une nouvelle API deRoomDatabase.Builderpermettant 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.Builderpermettant de recréer automatiquement la base de données en cas de retour à une version antérieure. b/110416954ignoredColumns: nouvelle API de l'annotation@Entityqui 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
mCallbacketmDatabasedansRoomDatabasesont désormais@Deprecatedet 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
PositionalDataSourceet 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
NavigationViewentraî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)auWorkersous-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
LiveDataen interne.
Modifications apportées à l'API
- Vous pouvez maintenant créer vos propres instances
Workerau moment de l'exécution en spécifiant uneWorkerFactorydans 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
WorkeretNonBlockingWorkersont 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
ListenableFutureen 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
TestDriverviaTestDriver.setInitialDelayMet(UUID)etTestDriver.setPeriodDelayMet(UUID). b/113360060
Modifications destructives
- Les constructeurs
WorkeretNonBlockingWorkerpar 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
Datapour 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
ConcurrentModificationExceptiondansConstraintTracker. b/112272753 - Remplacement des annotations du type renvoyé de
Data.getBooleanArray(String)etData.getIntArray(String)par@Nullableau 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,NonBlockingWorkerdeviendra 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@Nullableau 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
PeriodicWorkde 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
WorkRequestuniques lors de l'utilisation deWorkRequest.Builder#build(). b/111408337 - Activation de l'utilisation de
RescheduleReceiveruniquement 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@NonNullau 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.INFOet 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
PeriodicWorkRequestlors de l'utilisation deJobScheduler. b/110798652 - Correction d'un problème avec les
PeriodicWorkRequestqui 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
BroadcastReceiverdevenus 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 laWorkRequestdonnée. b/111238024
Modifications destructives
WorkManager.getInstance()est désormais annoté avec@NonNullau 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:typea été remplacé parapp:argTypepour é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
NonNullne sont pas nuls (b/111451769). - Des annotations
NonNullsupplé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.indexdeviendrasetDemoControllerIndex. (b/79995048) - Par exemple,
action_show_settingsdeviendraactionShowSettings. (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
setPopUpToavec la première destination dans le graphique (b/109909461). - Correction d'un problème lié à la transmission de toutes les valeurs
app:defaultValueen 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:namedans 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 desquelsPagedListAdapteretAsyncPagedListDifferne 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
PagedListAdapteretAsyncPagedListDifferne parvenaient pas à signaler des événements de déplacement. b/110711937
WorkManager
Publication de WorkManager 1.0.0-alpha04.
Correction de bugs
Les
PeriodicWorkRequestsont 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
JobScheduleraprè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-rc1deRoom.
Modifications apportées à l'API
Ajout de
getStatusesSync(), la version synchrone deWorkContinuation.getStatuses().Workerpermet de faire la distinction entre l'annulation déclenchée par l'utilisateur et l'arrêt temporaire demandé par l'OS.Worker.isStopped()renvoietruesi un type d'arrêt a été demandé.Worker.isCancelled()renvoietruelorsque 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 àJobSchedulerouAlarmManager. Cela permet d'éviter queWorkManagern'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âchesJobSchedulerqueWorkManagerpeut utiliser de manière sûre. b/79996760Worker.getRunAttemptCount()renvoie le nombre d'exécutions actuel pour unWorkerdonné. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)vous permet de placer desPeriodicWorkRequestuniques en file d'attente. b/79600647WorkManager.cancelAllWork()annule tous lesWorker. Les bibliothèques qui dépendent deWorkManagerpeuvent 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 desWorkRequestsanstagou lorsque l'idn'est pas disponible. b/109572351
Modifications destructives
Changement de nom :
Worker.WorkerResultdevientWorker.Result.Worker.onStoppedcomporte désormais un paramètreisCancelledsupplémentaire défini surtruelorsque leWorkera été explicitement annulé.
7 juin 2018
Publication de Navigation 1.0.0-alpha02.
Navigation
Nouveaux comportements
FragmentNavigatorutilise 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
IllegalStateExceptionlors 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
IllegalArgumentExceptionlors de l'utilisation de defaultNavHost="true" comme fragment enfant (b/79656847).Correction d'une
StackOverflowErrorlors de l'utilisation de NavDeepLinkBuilder (b/109653065).Correction d'une
IllegalArgumentExceptionlors 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
clearTaskpour les actions et l'API associée dansNavOptions. (b/80338878)Abandon de l'attribut
launchDocumentpour 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
NullPointerExceptiondansState.isFinished(). b/79550068Correction d'un problème provoquant la reprogrammation de
WorkerdansApplication.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 à
Workervers le thread d'arrière-plan.L'implémentation de
AlarmManagerest 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
floatdansData. 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
Workerpeuvent réagir à un arrêt.Worker.isStopped()permet de vérifier si unWorkera été arrêté.Worker.onStopped()peut être utilisé pour effectuer des opérations de nettoyage légères.L'API
Worker.getTags()renvoie unSetde balises associées auWorker.Ajout de surcharges
javax.time.Durationpour les API qui combinent une durée et desTimeUnit. Cela est protégé par@RequiresApi(26).Déplacement des extensions
WorkManagerdu packageandroidx.work.ktxvers 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
RxPagedListBuildervia 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.BuilderetLivePagedListBuilder).setMainThreadExecutor()renommésetNotifyExecutor()(dansPagedList.Builder).
Correction du membre
PagedList.mCallbacks, défini comme privé.
Correction de bugs
LivePagedListBuilderdéclenche le chargement initial dePagedListsur 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
DataSourceinternes (utilisés pour implémenterDataSource.map, ainsi que pour le chargement de laPositionalDataSourceavec espaces réservés désactivés). b/77237534
Room
Correction de bugs
Correction d'un bug critique dans les implémentations
SingleetMaybeRx de Room, dans lesquelles la requête était recyclée à l'avance, causant des problèmes si vous ajoutiez plus d'un observateur aux instancesSingleouMayberenvoyées. b/76031240RoomDatabase.clearAllTables n'exécute pas
VACUUMdans 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,
@RawQueryn'accepte plus la transmission d'uneStringcomme 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 intau 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.@RawQueryaccepte 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 champsEmbeddedou 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.LoadCallbacksont désormais abstraits. Ces changements permettent d'encapsuler uneDataSourceou de tester directement uneDataSourceavec 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.extensionset 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
DataSourcede 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.onItemAtEndLoadedpourPositionalDataSourcesi 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
addObserveretremoveObserverd'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/63807999SupportSQLiteQuerydispose désormais d'une méthodegetArgCount()qui renvoie le nombre de paramètres de requête. b/67038952
Correction de bugs
@RawQueryest désormais correctement prise en charge pour les requêtes de Paging. b/72600425Désormais, Room nomme correctement les classes
Daogénérées pour éviter les conflits de noms lorsque deux interfacesDaoou 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
Pojosont correctement analysés en tant que membre de la classe d'extension. b/73534868Les paramètres de requête dans les interfaces
Daohéritées des artefacts de dépendance sont désormais correctement analysés. b/68118746Les requêtes générées pour
@Relationpermettent 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->AsyncListDifferListAdapterConfig->AsyncDifferConfigDiffCallback->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-alpha6etcom.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
ListAdapterHelperparAsyncListDiffer.- 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
ListAdapterConfigparAsyncDifferConfig. - Remplacement de toutes les références de
DiffCallbackparDiffUtil.IttemCallback. - Remplacement de toutes les références de
PagedListAdapterHelperparAsyncPagedListDiffer. - 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 16ou 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'artefactguavadepuis 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
@Transactiondans les classesDAO. Cela fonctionne enJava 8et enKotlin. b/72416735
Correction de bugs
Les constructeurs avec
@Relationne 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@Querysont maintenant correctement échappés pour l'outil de suivi d'invalidation. b/72366965Room utilise désormais les annotations
@Metadatade 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.0android.arch.lifecycle:viewmodel:1.1.0
Modifications apportées à l'API
- Les
LifecycleActivityetLifecycleFragmentobsolètes ont été supprimés. Veuillez utiliserFragmentActivityouAppCompatActivity, ou assurez-vous queFragmentest compatible. - Ajout des annotations
@NonNullàViewModelProvidersetViewModelStores. - 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 uneFactorystatique adaptée à la création d'instancesViewModeletAndroidViewModel.
Room 1.1.0-alpha1
Nouvelles fonctionnalités
RawQuery: cette nouvelle API permet aux méthodes@Daode recevoir le SQL en tant que paramètre de requête. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom: cette nouvelle API deRoomDatabase.Builderpermet 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
LivePagedListProviderobsolète. Pour utiliser la nouvelle version alpha de Room, vous devez utiliser Pagingalpha-4ou version ultérieure et passer deLivePagedListProvideràLivePagedListBuildersi 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
DataSourceest 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
PagedListdans le thread UI. - Comportement plus clair des erreurs liées aux paramètres de chargement initiaux.
TiledDataSourcerenomméePositionalDataSourceafin 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
PageKeyedDataSourcepour prendre en charge les jetons suivants/précédents intégrés aux chargements de page de réseau.KeyedDataSourcerenomméeItemKeyedDataSourcepour indiquer clairement la différence.LivePagedListBuilderetDataSource.FactoryremplacentLivePagedListProvider. 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.BoundaryCallbackpour 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.Configpossè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,
LiveDataReactiveStreamsimplé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_STOPest désormais envoyé lorsqueonSaveInstanceStateest appelé. Auparavant, il était simplement marqué commeCREATEDsans 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
OutOfMemorylors de la compilation. b/62473121 - Les méthodes
Querypeuvent désormais être annotées avec@Transaction. Pour en savoir plus, consultez la documentation de référence sur@Transaction. b/65112315 - La classe
StringUtilde 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 :
LiveDatafonctionne correctement lorsque Activity est partiellement couverte sur les niveaux d'API inférieurs à 24. b/65665621Les méthodes
OnLifecycleEventdans 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,
LiveDataReactiveStreamsse désabonne correctement de l'éditeur source lorsqueLiveDatan'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
FullLifecycleObserverpour 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
@Querycomporte un champ@NonNullqui 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
Nullables'il s'agit d'unIntegerouLong. 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.0stable. Ils ne sont pas nécessaires si vous utilisez la bibliothèque Support26.1.0ou 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.0depuis 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.1pour 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.dba été déplacé versandroid.arch.persistence.db.android.arch.persistence.room.db-impla é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
transientsont désormais ignorés par défaut, sauf s'ils sont annotés avec@ColumnInfo,@Embeddedou@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
DAOet 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
@Querysont 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
@Generatedsi 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
WITHsont 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 NULLpour 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_CREATEet 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 : siobserver1est ajouté avantobserver2,ON_CREATEest d'abord envoyé àobserver1, puis àobserver2(il en va de même pourON_STARTetON_RESUME), mais l'événementON_PAUSEest d'abord envoyé àobserver2et ensuite àobserver1(idem pourON_STOPetON_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.Builderpour 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.Builderpour observer la création ou l'ouverture d'une base de données. b/62699324@Query peut désormais renvoyer RxJava
MaybeouSingle. 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
@Deletesans 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,@Deleteet@Updatepeuvent 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,
@OnLifecycleEventne 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
LifecycleActivityetLifecycleFragmentsont déplacées dans l'artefactandroid.arch.lifecycle:extensions.MigrationTestHelper reçoit l'instance Instrumentation au lieu de
Contextpour 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,@Deleteet@Updatedans les méthodes@DAOpeuvent désormais comporterIterablecomme 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
INsont désormais gérés correctement. b/62608681Les classes DAO abstraites peuvent maintenant comporter un constructeur qui reçoit l'instance
@Database. b/38488747Les
DAOpeuvent 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
FragmentetActivityCompatde 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.