架构组件发行说明存档

2019 年 1 月 15 日

WorkManager

WorkManager 1.0.0-beta02 已发布。此版本包含一些错误修复。

错误修复

  • 修复了在运行 Android 6.0(API 级别 23)的设备上,周期性工作可能会每隔一段时间运行多次的极端情况。 b/121998363
  • 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上的 ConcurrentModificationExceptionb/121345393
  • 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上,在不满足约束条件时错误执行工作的问题。 b/122578012
  • 优化了工作完成处理,使其在某些极端情况下速度更快。 b/122358129
  • 添加了更改以解决 WorkManager 使用的多个 LiveData 实例之间的潜在竞争条件。
  • 迁移到使用 Room 依赖项 1.1.1,而不是 1.1.1-rc01;这两个版本是相同的。 b/122578011

2018 年 12 月 19 日

WorkManager

WorkManager 1.0.0-beta01 已发布。此版本不包含任何 API 更改;展望未来,除非出现严重问题,否则 WorkManager 预计将在下一个版本之前保持 API 稳定。此版本包含一些错误修复。

错误修复

  • 之前已取消的、父级工作已成功完成的子级工作将不再运行。b/120811767
  • 正确初始化的日志记录类(主要在测试期间出现)。

2018年12月18日

导航 1.0.0-alpha09 版本已发布。此版本包含破坏性 API 更改;请参阅下面的“破坏性更改”部分。

我们已选择不再开发 android.arch.navigation:navigation-testing 工件。虽然它已被证明有助于对 NavController 进行内部测试,但我们强烈建议采用其他测试策略,例如模拟 NavController 实例以验证是否正在进行正确的 navigate() 调用。这种方法在AndroidDevSummit 2018 的单活动演讲中进行了详细讨论,我们将致力于编写更多关于使用导航进行测试的文档。

新功能

  • 具有 menuCategory="secondary"MenuItem 将不再在与 NavigationUI 方法一起使用时弹出返回堆栈。b/120104424
  • AppBarConfiguration 现在允许您设置一个回退 OnNavigateUpListener 实例,当 navController.navigateUp() 返回 false 时将调用该实例。b/79993862 b/120690961

破坏性更改

  • 当使用带有 argType="reference"<argument> 时,导航不再解析引用,而是直接提供原始资源 ID 本身。b/111736515
  • onNavDestinationSelected() 现在默认情况下会返回到导航图的起始目的地,使其与 setup 方法保持一致。将 menuCategory="secondary" 添加到您的 MenuItem 以避免弹出返回堆栈。aosp/852869
  • 生成的 Args 类的 fromBundle() 方法现在采用非空 Bundle 而不是可空 Bundle aosp/845616

错误修复

  • 参数现在可以从深层链接中正确解析为正确的 argType,而不是始终作为字符串解析 b/110273284
  • 导航现在可以正确导出其公共资源 b/121059552
  • Safe Args 现在与 Android Gradle Plugin 3.4 Canary 4 及更高版本兼容 b/119662045

2018年12月12日

WorkManager

WorkManager 1.0.0-alpha13 版本已发布。此版本包含一个次要 API 更改,这将对某些 Kotlin 用户有所帮助。

API 更改

  • androidx.work.Result 已移至成为 ListenableWorker 的内部类。这可以防止与 Kotlin 的顶级 Result 类发生重构冲突。 *这是一个破坏性 API 更改。* b/120564418

破坏性 API 更改

  • androidx.work.Result 已移至成为 ListenableWorker 的内部类。

2018年12月6日

分页

分页 2.1.0-rc01 版本已发布,与 2.1.0-beta01 版本相比没有变化。

导航 1.0.0-alpha08 版本已发布。此版本包含破坏性 API 更改;请参阅下面的“破坏性更改”部分。

新功能

  • 目的地标签在与 NavigationUI 方法一起使用时,现在将自动替换 android:label 中的 {argName} 实例为正确的参数 b/80267266
  • 导航现在依赖于 Support Library 28.0.0 b/120293333

破坏性更改

  • OnNavigatedListener 已重命名为 OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener 现在还会传递参数的 Bundle aosp/837142
  • app:clearTaskapp:launchDocument 属性及其关联的方法已被删除。使用 app:popUpTo 和您的图的根来从返回堆栈中删除所有目的地。b/119628354
  • ActivityNavigator.Extras 现在使用构建器模式,并增加了设置任何 Intent.FLAG_ACTIVITY_ 标志的功能 aosp/828140
  • NavController.onHandleDeepLink 已重命名为 handleDeepLink aosp/836063
  • 许多并非旨在进行子类化的类和方法(例如 NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration)已被设为 final aosp/835681
  • 已删除不推荐使用的 NavHostFragment.setGraph() 方法 aosp/835684
  • 已删除不推荐使用的 NavigationUI.navigateUp(DrawerLayout, NavController) 方法。 aosp/835684
  • 片段创建已移至 FragmentNavigator,这使得更容易将片段创建委托给 FragmentFactoryb/119054429
  • NavGraphNavigator 的构造函数不再采用 Context aosp/835340
  • NavigatorProvider 现在是一个类,而不是一个接口。getNavigatorProvider() 返回的 NavigatorProvider 的功能没有改变。aosp/830660
  • NavDestination.navigate() 已删除。改为在 Navigator 上调用 navigate()aosp/830663
  • Navigator 进行了重大重构,无需 OnNavigatorNavigatedListener,而是让 navigate 返回已导航到的 NavDestination
  • Navigator 实例不能再向 NavController 发送弹出事件。考虑使用 OnBackPressedCallback 来拦截返回按钮按下并调用 navController.popBackStack()aosp/833716

错误修复

  • popUpTo 现在在目的地是 <navigation> 元素时可以一致地工作 b/116831650
  • 修复了若干错误,这些错误会导致在使用嵌套图时出现 IllegalArgumentException b/118713731 b/113611083 b/113346925 b/113305559
  • <activity> 目的地 的 dataPattern 属性现在将通过调用 toString() 来填充非字符串参数中的参数 b/120161365

Safe Args

  • Safe Args 支持可序列化对象,包括枚举值。枚举类型可以通过使用不带类名的枚举文字来设置默认值(例如 app:defaultValue="READ"b/111316353
  • Safe Args 支持所有受支持类型(包括枚举值)的数组 b/111487504
  • Safe Args 现在会忽略资源目录的子文件夹 b/117893516
  • Safe Args 在适当的位置添加了 @Override 注释 b/117145301

2018年12月5日

WorkManager

WorkManager 1.0.0-alpha12 版本已发布。此版本包含一些破坏性 API 更改;请参阅下面的“破坏性 API 更改”部分。此版本可能会作为我们的第一个测试版发布。alpha12 还包含大量的文档更新。

API 更改

  • 一个新的工件 work-rxjava2 引入了 RxWorker。这是一个 ListenableWorker,它期望一个 Single<Payload>
  • 由于 Firebase JobDispatcher 即将弃用,因此已删除对它的支持。这意味着随着我们进入测试版阶段,work-firebase 工件将不再更新。我们将来会考虑添加替代方案。
  • Payload 合并到 Result 中。Result 现在是一个“密封类”,具有三个具体的实现,您可以通过 Result.success()(或 Result.success(Data))、Result.failure()(或 Result.failure(Data))和 Result.retry() 来获取这些实现。您的 ListenableFuture 现在返回 Result 而不是 PayloadWorker 没有输出 Data 的 getter 和 setter 方法。 *这是一个破坏性更改。*
  • 添加了 Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) 及其变体,以更好地支持慢速触发的内容 URI。b/119919774
  • 添加了 WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) 变体。此方法需要 API 26。
  • 添加了 Operation.await()ListenableFuture.await() Kotlin 扩展方法。
  • Operation.getException() 重命名为 Operation.getThrowable()。 *这是一个破坏性更改。*
  • ContentUriTriggers 类和引用它的方法不再可供公开使用。 *这是一个破坏性更改。*
  • 删除了 WorkManagerWorkContinuationOneTimeWorkRequest 中其余的 varargs 方法,以简化 API。要修复任何构建问题,您可以使用 Arrays.asList(...) 包装现有的 varargs。我们仍然包含每个方法的单参数版本。 *这是一个破坏性更改。*
  • 删除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们提供了一个令人困惑的 API;现有的 combine 方法更容易理解。 *这是一个破坏性更改。*

错误修复

  • Marshmallow 之前的实现现在在恢复已执行任务的进程死亡方面更加可靠。
  • 通过 observeForever 观察到的 LiveData 将通过 WorkManager 进行跟踪。这是 Room 库修复程序的反向移植。b/74477406
  • Data.Builder.build() 现在会在序列化对象超过其最大大小时抛出异常。以前,这只会发生在后台线程中,您无法正确处理它。
  • 进一步区分了已停止和已取消的工作;在 ListenableWorker.onStopped() 期间,getWorkInfoById() 将返回一个状态为 CANCELLEDWorkInfo
  • ListenableWorker 中将 null Result 视为失败。 b/120362353
  • 针对运行 API 24 的 Shield 平板电脑有时会抛出 IllegalArgumentException 的问题进行了推测性修复。 b/119484416

破坏性 API 更改

  • 由于 Firebase JobDispatcher 即将弃用,因此已删除对它的支持。这意味着随着我们进入测试版阶段,work-firebase 工件将不再更新。我们将来会考虑添加替代方案。
  • Payload 合并到 Result 中。 Result 现在是一个“密封类”,具有三个具体的实现,您可以通过 Result.success()(或 Result.success(Data))、Result.failure()(或 Result.failure(Data))和 Result.retry() 获取。您的 ListenableFuture 现在返回 Result 而不是 PayloadWorker 没有获取和设置输出 Data 的方法。
  • 添加了 Operation.await()ListenableFuture.await() Kotlin 扩展方法。
  • Operation.getException() 重命名为 Operation.getThrowable()
  • ContentUriTriggers 类和引用它的方法不再可供公共使用。
  • 删除了 WorkManagerWorkContinuationOneTimeWorkRequest 中其余的变长参数方法,以简化 API。要修复任何构建问题,您可以使用 Arrays.asList(...) 包装您现有的变长参数。我们仍然包含每个方法的单参数版本。
  • 删除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们提供了一个令人困惑的 API;现有的 combine 方法更容易理解。

2018年12月4日

Room

Room 2.1.0-alpha03 版本已发布,包含协程支持和一些错误修复。

API 更改

  • @Fts3/@Fts4 中的 FTS tokenizer 现在接受字符串而不是枚举。这允许 Room 使用自定义标记器。内置标记器仍然在 FtsOptions 中定义为字符串常量。 b/119234881

新功能

  • 协程:DAO 方法现在可以是挂起函数。为了支持 Room 中的挂起函数,已经发布了一个新的构件 room-coroutinesb/69474692
  • 使用 @Insert@Delete@Update 注解的 DAO 方法现在支持 ListenableFuture 作为返回类型。 b/119418331

错误修复

  • 修复了 Room 会错误地尝试查找 @EntityignoredColumns 属性中包含列的构造函数的错误。 b/119830714
  • 修复了 Room 在其生成的实现中不会将 DAO 方法参数标记为 final 的错误。 b/118015483
  • 修复了 Room 处理器在报告包含特殊符号的查询错误时会崩溃的错误。 b/119520136
  • 修复了 Room 会拒绝 IN 表达式的参数为其他各种 Collection 实现的错误。 b/119884035
  • 修复了 Room 返回的 LiveData 在永久观察时会被垃圾回收,导致它不再发出新数据的错误。 b/74477406
  • 更新了 RoomDatabase 的关闭锁以减少锁竞争。 b/117900450

2018年11月8日

WorkManager

WorkManager 1.0.0-alpha11 版本已发布。此版本包含许多将在 beta 版本中成为稳定 API 的更改。此版本中存在重大 API 更改;请参阅下面的“重大 API 更改”部分。

API 更改

  • work-runtime-ktx 引入了一个新的 CoroutineWorker
  • WorkStatus 已重命名为 WorkInfo。所有相应的 getStatus 方法变体已重命名为相应的 getWorkInfo 变体。这是一个重大更改。
  • ListenableWorker.onStopped() 不再接受表示 WorkRequest 是否已取消的布尔值参数。 WorkManager 不再区分这一点。这是一个重大更改。
  • androidx.work.test 包已重命名为 androidx.work.testing 包。这是一个重大更改。
  • Constraints 上的 setter 方法不再是公共 API 的一部分。这是一个重大更改。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 以前返回数组。现在这些方法返回集合。这是一个重大更改。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()这是一个重大更改。
  • WorkStatus 的构造函数不再是公共 API 的一部分。这是一个重大更改。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()这是一个重大更改。
  • 向公共 API 添加了许多 @NonNull 注解,以改善 API 的人体工程学。
  • 添加了 WorkManager.enqueueUniqueWork() API,用于在无需创建 WorkContinuation 的情况下排队唯一的 OneTimeWorkRequest
  • WorkManager 上所有 enqueuecancel 方法的变体现在返回新的 Operation 类型。这是一个重大更改。
  • enqueue 的所有变体不再接受 WorkRequest 的变长参数。这是一个重大更改。 使用集合代替。您可以使用 Arrays.asList() 修改现有代码。我们这样做是为了减少 API 表面和方法数量。
  • 每个进程尝试多次 initialize WorkManager 现在将导致 IllegalStateException这是一个重大更改。

错误修复

  • work-runtime-ktx 构件中的 WorkRequest.Builder 现在使用 ListenableWorker。修复了 b/117666259
  • 确保 PeriodicWork 的下次运行时间在未来。修复了 b/118204399
  • 在应用启动时使用 WorkManager 时删除潜在的磁盘 I/O。修复了 b/117796731
  • 修复了 WorkConstraintsTracker 中的竞争条件。修复了 android-workmanager/issues/56

破坏性 API 更改

  • WorkStatus 已重命名为 WorkInfo。所有相应的 getStatus 方法变体已重命名为相应的 getWorkInfo 变体。
  • ListenableWorker.onStopped() 不再接受表示 WorkRequest 是否已取消的布尔值参数。 WorkManager 不再区分这一点。
  • androidx.work.test 包已重命名为 androidx.work.testing 包。
  • Constraints 上的 setter 方法不再是公共 API 的一部分。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 以前返回数组。现在这些方法返回集合。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()
  • WorkStatus 的构造函数不再是公共 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManager 上所有 enqueuecancel 方法的变体现在返回新的 Operation 类型。
  • enqueue 的所有变体不再接受 WorkRequest 的变长参数。
  • 每个进程尝试多次 initialize WorkManager 现在将导致 IllegalStateException

2018年11月1日

分页

Paging 2.1.0-beta01 版本已发布,与 2.1.0-alpha01 版本相比没有变化。

2018年10月30日

Room

Room 2.1.0-alpha02 版本已发布,包含一些错误修复和一个新功能。

新功能

  • 添加了对在 @Relation 中引用 @DatabaseView 的支持。 b/117680932

错误修复

  • 修复了 Room 在订阅和释放 Rx 返回类型时会在主线程中执行磁盘 I/O 的错误。 b/117201279
  • 修复了 Room 无法为 Kotlin 实体类中的字段找到合适的类型转换器的错误。 b/111404868
  • 修复了 Room 为包含没有参数的 Kotlin 默认方法的 DAO 接口实现生成不正确代码的错误。 b/117527454
  • 更新了 Room 的 SQLite 语法解析器,修复了会导致构建时间过长的性能问题。 b/117401230

2018年10月29日

Navigation 1.0.0-alpha07 版本发布,包含错误修复和 API 更改。

新功能

破坏性更改

  • navigation-testing-ktx 模块已合并到 navigation-testing artifact 中,并将不再发布。
  • navigation-testing artifact 现在依赖于 Kotlin 标准库。API 已更改为与 Kotlin 约定更一致,但您仍可将其用于用 Java 编写的测试。
  • 不再支持在清单中注册的元数据导航图。 b/118355937
  • 操作不再可以附加到 <activity> 目标。 aosp/785539

错误修复

  • 深层链接现在可以正确解析查询参数。 b/110057514
  • Activity 目标现在可以正确应用所有进入和退出动画。 b/117145284
  • 修复了使用自定义导航器时在配置更改后发生的崩溃问题。 b/110763345

Safe Args

  • Safe Args 现在对 Android Gradle 插件 3.2.1 有固定依赖。 b/113167627
  • 现在可以为内部类生成 Directions。 b/117407555
  • 修复了生成指向 <include> 图的 Directions 的问题。 b/116542123

2018年10月12日

分页

Paging 2.1.0-alpha01 版本发布,包含两个主要新增功能——页面丢弃和针对每个构件的 KTX 扩展库——以及其他一些 API 更改和错误修复。

API 更改

  • 添加了 PagedList.Config.Builder.setMaxSize() 用于限制内存中加载的项目数量。
  • 添加了 androidx.paging.Config() 作为 PagedList.Config.Builder 的 Kotlin 替代方案。
  • 添加了 androidx.paging.PagedList() 作为 PagedList.Builder 的 Kotlin 替代方案。
  • 添加了 DataSourceFactory.toLiveData() 作为 LivePagedListBuilder 的 Kotlin 替代方案。
  • 添加了 DataSourceFactory.toObservable()toFlowable() 作为 RxPagedListBuilder 的 Kotlin 替代方案。
  • 添加了 AsyncPagedListDiffer.addPagedListListener() 用于监听何时交换 PagedList。 b/111698609
  • 添加了 PagedListAdapter.onCurrentListChanged() 变体,它传递旧列表和新列表,并弃用了之前的变体。
  • 添加了 PagedListAdapter/AsyncPagedListDiffer.submitList() 变体,它带有一个附加回调,如果/何时在差异化后显示 pagedlist,则会触发该回调。这允许您将 PagedList 交换与其他 UI 更新同步。 b/73781068
  • PagedList.getLoadedCount() 已添加,让您知道内存中有多少项。请注意,如果禁用占位符,则返回值始终等于 .size()

错误修复

  • 修复了在差异化列表被重用时的竞争条件 b/111591017
  • PagedList.loadAround() 现在在索引无效时抛出 IndexOutOfBoundsException。之前它可能会以其他不明确的异常崩溃。
  • 修复了极小的初始加载大小与数据不变一起会导致不再加载的情况 b/113122599

2018年10月11日

WorkManager

WorkManager 1.0.0-alpha10 版本发布,支持开发人员控制的异步工作。此版本中存在重大 API 更改;请参阅下面的“重大 API 更改”部分。

我们预计 WorkManager 即将进入 Alpha 阶段的最后阶段。我们预计在 Beta 版中 API 将保持稳定,因此请花一些时间在我们的问题跟踪器上提交您的反馈。

API 更改

  • 删除了所有先前已弃用的方法和类,特别是默认的 Worker 构造函数。这是一个重大 API 更改。
  • NonBlockingWorker 重命名为 ListenableWorker,它现在是一个未隐藏的公共类,可以随时使用。
    • ListenableWorker 提供对一个抽象方法 ListenableFuture<Payload> onStartWork() 的访问,该方法在主线程上调用。您可以异步启动和处理工作。完成后,您应相应地更新 ListenableFutureListenableFuture 的参考实现在 alpha02 中的 Futures 包中提供(请参见 WorkManager 部分以下的内容)。
    • Worker 扩展 ListenableWorker 并像以前一样操作,具有一个抽象的 Result doWork() 方法。
    • 将一些方法和成员从 Worker 移到了 ListenableWorker
    • 我们将很快提供使用 Kotlin 协程(一旦发布稳定版本)和 RxJava2 的 ListenableWorker 的参考实现。
  • 接口 WorkerFactory 和具体实现 DefaultWorkerFactory 已合并到名为 WorkerFactory 的抽象类中。该实现确保默认基于反射的行为作为最后手段为任何用户创建的 WorkerFactory 实例调用。这是一个重大更改。
  • 删除了 WorkManager.synchronous()WorkContinuation.synchronous() 以及所有相关方法。将 ListenableFuture<Void> 添加为 API 中许多方法的返回类型。这是一个重大的 API 更改。
    • 您现在可以使用 ListenableFuture 同步获取和观察。例如,WorkManager.enqueue() 以前返回 void;现在它返回 ListenableFuture<Void>。您可以调用 ListenableFuture.addListener(Runnable, Executor)ListenableFuture.get() 来运行操作完成后执行的代码。
    • 请注意,这些 ListenableFuture 并不会告诉您操作成功还是失败;只会告诉您它们已完成。您仍然需要链接 WorkManager 方法才能找出此信息。
    • 我们忽略这些对象上的 cancel() 调用,因为它们令人困惑且难以推理(您是在取消操作还是取消产生的工作?)。这在 Future 合同中。
    • 为了与同步 getStatus* 方法保持一致,我们提供了 ListenableFuture 变体,并将返回 LiveData 的现有变体重命名为明确包含“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID))。这是一个重大的 API 更改。

错误修复

  • 修复了 alpha09 中关于重复 androidx-annotations.pro 文件的已知问题。您可以通过从您的 gradle 文件中删除 exclude 'META-INF/proguard/androidx-annotations.pro' 来删除先前发行说明中的解决方法。
  • 添加了 proguard 配置以保留新的 Worker 构造函数。 b/116296569
  • 修复了在工作被 REPLACE 时的竞争条件中潜在的 NullPointerExceptionb/116253486b/116677275
  • WorkContinuation.combine() 现在接受一个或多个 WorkContinuation 而不是两个或多个。 b/117266752

破坏性 API 更改

  • 删除了所有先前已弃用的方法和类,特别是默认的 Worker 构造函数。
  • 接口 WorkerFactory 和具体实现 DefaultWorkerFactory 已合并到名为 WorkerFactory 的抽象类中。
  • 删除了 WorkManager.synchronous()WorkContinuation.synchronous()
  • WorkManager.getStatus*() 方法现在返回 ListenableFutureWorkManager.getStatus*LiveData() 返回 LiveData

Futures

Futures 1.0.0-alpha02 版本发布。

API 更改

  • 开发人员现在可以使用 ResolvableFutureAbstractResolvableFuture 作为 ListenableFuture 的轻量级具体实现。

2018年10月8日

Room

Room 2.1.0-alpha01 版本发布。

新功能

  • FTS:Room 现在支持具有映射 FTS3 或 FTS4 表的实体。使用 @Entity 注解的类现在可以额外使用 @Fts3@Fts4 注解来声明具有映射全文搜索表的类。可以通过注解的方法获得更多自定义的 FTS 选项。b/62356416
  • 视图:Room 现在支持使用 @DatabaseView 注解将类声明为存储查询,也称为 视图b/67033276
  • Auto Value:Room 现在支持将使用 AutoValue 注解的类声明为实体和 POJO。Room 注解 @PrimaryKey@ColumnInfo@Embedded@Relation 现在可以声明在使用 auto value 注解的类的抽象方法中。请注意,这些注解也必须伴随 @CopyAnnotations,Room 才能正确理解它们。b/62408420
  • 更多 Rx 返回类型支持:使用 @Insert@Delete@Update 注解的 DAO 方法现在支持 Rx 返回类型 CompletableSingle<T>Maybe<T>b/63317956
  • 使用 @Relation 的不可变类型:Room 之前要求 @Relation 注解的字段是可设置的,但现在它们可以是构造函数参数。
  • enableMultiInstanceInvalidation:是 RoomDatabase.Builder 中的一个新 API,用于使用相同的数据库文件启用跨多个 RoomDatabase 实例的失效。这种多实例失效机制也适用于多个进程。b/62334005
  • fallbackToDestructiveMigrationOnDowngrade:是 RoomDatabase.Builder 中的一个新 API,如果发生降级,则会自动重新创建数据库。b/110416954
  • ignoredColumns:是 @Entity 注解中的一个新 API,可用于列出按名称忽略的字段。对于忽略实体上的继承字段很有用。b/63522075

API/行为变更

  • RoomDatabase 中的 mCallbackmDatabase 现在已 @Deprecated,并将从 Room 的下一个主要版本中删除。b/76109329

错误修复

  • 修复了 Room 在初始化期间无法从损坏的数据库或错误的迁移中正确恢复的两个问题。b/111504749b/111519144
  • Room 现在将正确使用 Kotlin 数据类中的主构造函数,避免需要将字段声明为 varsb/105769985

2018年10月1日

Room 2.0.0 版本发布,与 2.0.0-rc01 版本相比没有变化。Paging 2.0.0 版本发布,包含一个错误修复。

分页

错误修复

  • 修复了使用 PositionalDataSource 和占位符进行非常快速滚动时可能发生的崩溃。b/114635383

2018年9月21日

Lifecycle 2.0.0 版本发布,包含一个在 ViewModel 中修复的错误。2.0.0-rc01

Lifecycle

错误修复

  • 修复了错误地删除构造函数的 ViewModel proguard 规则。b/112230489

2018年9月20日

Navigation 1.0.0-alpha06 版本发布,包含错误修复和 API 变更。

新功能

API 更改

  • 重大更改:Navigator navigate() 方法现在采用 Navigator.Extras 参数。
  • NavController 的 getGraph() 方法现在为 NonNull b/112243286

错误修复

  • NavigationUI.setupWithNavController() 如果与各个目标的视图一起使用,现在不会再泄漏视图。b/111961977
  • Navigator onSaveState() 现在只调用一次。b/112627079

Safe Args

  • 如果存在,Navigation 目标 Directions 类现在扩展其父级的 Directions 类。b/79871405
  • Directions 和 Args 类现在具有有用的 toString() 实现。b/111843389

2018年9月19日

WorkManager

WorkManager 1.0.0-alpha09 版本发布,包含错误修复、基础结构更新和 API 变更。

已知问题

如果您遇到以下问题:“找到多个具有操作系统无关路径 'META-INF/proguard/androidx-annotations.pro' 的文件”,请在您的 gradle 文件中加入以下内容作为临时解决方法,直到我们在 alpha10 中修复此问题。

Groovy

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

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

错误修复

  • 添加了另一个修复程序,这是“100 个作业”错误所需的。b/115560696
  • 添加了一些修复程序,用于解决由于竞争条件导致的外键约束错误。b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) 调用委托给底层的 Workerb/114125093
  • 强制执行 Firebase JobDispatcher 的正确最小回退延迟。b/113304626
  • 改进了库内部的线程保证。
  • 修正了内部 LiveData 重复数据删除的潜在问题。

API 更改

  • 您现在可以通过将 WorkerFactory 指定为 WorkManager.Configuration 的一部分,在运行时创建您自己的 Worker 实例。回退工厂是 DefaultWorkerFactory,它与以前版本的 WorkManager 的行为匹配。
    • WorkerNonBlockingWorker 的默认构造函数现在标记为已弃用。请使用新的构造函数(Worker(Context, WorkerParameters))并调用 super(Context, WorkerParameters);未来的 WorkManager 版本将删除默认构造函数。
  • 我们已经开始在内部使用新的 ListenableFuture 工件(无 Guava 依赖项)。我们将在即将发布的版本中将 ListenableFutures 引入 API。此更改将支持最终取消隐藏 NonBlockingWorker
  • 添加了通过 TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID)TestDriver 中触发定时工作的能力。b/113360060

破坏性更改

  • 默认的 WorkerNonBlockingWorker 构造函数已弃用。请尽快迁移到新的构造函数。未来的版本将删除默认构造函数。

2018年8月27日

WorkManager

WorkManager 1.0.0-alpha08 版本发布,包含错误修复。

错误修复

  • 明确将 WorkManager 组件标记为直接启动感知,因此它们不会在直接启动期间启动。将来,我们将提供一个直接启动感知的 WorkManager 版本。b/112665532
  • 修复了重试工作未运行的问题。b/112604021
  • 修复了周期性工作不会重复执行的问题(与上述问题相关)。b/112859683
  • 应用进程已运行时,遵守回退策略。
  • 更正了 Data 中的异常消息,以指示限制为 10KB。
  • Configuration.setMaxSchedulerLimit(int) 的最大值降低到 50,以解决 JobScheduler 处理完成时的一些延迟。b/112817355

2018年8月16日

WorkManager

WorkManager 1.0.0-alpha07 版本发布,包含错误修复和次要 API 变更。

错误修复

  • 修复了可能返回无限数量结果的具有负限制的潜在 SQL 查询。
  • 已完成执行的工作现在会正确取消其他调度程序中该工作的全部待处理副本。这会导致超过 JobScheduler 作业限制。b/111569265
  • 修复了 ConstraintTracker 中的 ConcurrentModificationExceptionb/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String) 的返回类型注解更改为 @Nullable,而不是 @NonNullb/112275229

API 更改

  • Worker 现在扩展了一个新类 NonBlockingWorker。这不会影响任何当前用法。将来,NonBlockingWorker 将成为用于自定义线程解决方案的完全受支持的实体。
  • Data.getBooleanArray(String)Data.getIntArray(String) 的返回类型注解更改为 @Nullable,而不是 @NonNullb/112275229
  • Kotlin 扩展:弃用 Map.toWorkData() 并添加顶级 workDataOf(vararg Pair<String, Any?>) 以与现有 API 保持一致。

2018年8月10日

Navigation 1.0.0-alpha05 版本发布,包含错误修复。

错误修复

  • 修复导致回退堆栈行为不正确的错误。b/111907708
  • 修复生成的 Args 类 equals() 中的错误。b/111450897
  • 修复 Safe Args 中的构建失败。b/109409713
  • 修复从资源标识符到 Java 名称的转换。b/111602491
  • 修复 Safe Args 插件中关于可空性的错误消息。
  • 添加缺失的可空性注解。

2018年8月6日

Lifecycle、Room 和 Paging 的 AndroidX 版本发布 2.0.0-rc01 版本。所有工件与 2.0.0-beta01 版本相比均未更改。

2018年8月1日

WorkManager

WorkManager 1.0.0-alpha06 版本发布,包含错误修复。

错误修复

  • 在调度工作时防止数据库锁定。b/111801342
  • 修复了在休眠模式下导致 PeriodicWork 未按计划运行的错误。b/111469837
  • 修复了跟踪约束时的竞争条件,该条件会导致 WorkManager 崩溃。googlecodelabs/android-workmanager/issues/56
  • 使用 WorkRequest.Builder#build() 时创建唯一的 WorkRequestb/111408337
  • 仅当有需要它的 WorkRequest 时才启用 RescheduleReceiver 的使用。b/111765853

2018年7月24日

WorkManager

WorkManager 1.0.0-alpha05 版本发布,包含重要的错误修复和日志记录更改。

API 更改

  • WorkManager.getInstance() 现在使用 @NonNull 注解,而不是 @Nullable。相反,如果在手动初始化的情况下单例未正确初始化,则该方法将抛出 IllegalStateException这是一个破坏性 API 更改。
  • 添加了一个新 API Configuration.Builder.setMinimumLoggingLevel(int),它可以控制 WorkManager 的详细程度。默认情况下,WorkManager 记录 Log.INFO 及其以上级别。
  • 修改了Data.getString()方法的签名,不再接受默认值(隐式为null)。**这是一个破坏性API变更。**
  • 将一些仅供内部使用的​​方法标记为@hide。这包括Constraints构造函数,Data.toByteArray()Data.fromByteArray(byte[])。**这是一个破坏性API变更。**

错误修复

  • 在已知的自动备份情况下,WorkManager不再执行工作。这可能会导致崩溃。b/110564377
  • 修复了使用JobSchedulerPeriodicWorkRequest重复调度的問題。b/110798652
  • 修复了设备休眠后PeriodicWorkRequest无法正确执行的问题。b/111469837
  • 修复了使用Firebase JobDispatcher时初始延迟的问题。b/111141023
  • 修复了一些潜在的竞争条件和计时问题。
  • 正确释放了不再需要的BroadcastReceiver
  • 优化了应用强制关闭后重启时的重新调度性能。
  • 允许在排队给定的WorkRequest之前或之后调用TestScheduler.setAllConstraintsMet(UUID)b/111238024

破坏性更改

  • WorkManager.getInstance()现在用@NonNull而不是@Nullable进行注释。
  • 修改了Data.getString()方法的签名,不再接受默认值(隐式为null)。
  • 将一些仅供内部使用的​​方法标记为@hide。这包括Constraints构造函数,Data.toByteArray()Data.fromByteArray(byte[])

2018年7月19日

Navigation 1.0.0-alpha04及其关联的Safe Args gradle插件包含许多API变更、行为变更和错误修复。

API/行为变更

  • NavHostFragment将始终将当前Fragment设置为主要导航Fragment,确保在弹出外部NavController之前弹出子Fragment管理器。b/111345778

Safe Args

  • **破坏性变更:**为了避免与ConstraintLayout 2.0.0-alpha1等其他库冲突,app:type已更改为app:argTypeb/111110548
  • Safe Args的错误消息现在可点击。b/111534438
  • Args类现在确认NonNull属性实际上不为空。b/111451769
  • 已向NavDirections和Args生成的类添加了额外的NonNull注释。b/111455455 b/111455456

错误修复

  • 修复了深层链接到Fragment目标后系统后退按钮的问题。b/111515685

2018年7月12日

Navigation 1.0.0-alpha03及其关联的Safe Args gradle插件包含许多API变更、行为变更和错误修复。

API/行为变更

  • 添加了用于Toolbar的NavigationUI.setupWithNavController方法。b/109868820
  • 添加了用于CollapsingToolbarLayout的NavigationUI.setupWithNavController方法。b/110887183
  • 当返回堆栈为空或给定的目标ID不在返回堆栈中时,popBackStack()现在返回false。b/110893637
  • FragmentManager保存状态后,FragmentNavigator现在忽略导航操作,避免“onSaveInstanceState后无法执行此操作”异常。b/110987825

Safe Args

  • **破坏性变更:**操作和参数名称中的非字母数字字符将被相应的NavDirections方法名称中的驼峰式命名法替换。
    • 例如,DemoController.index将变为setDemoControllerIndexb/79995048
    • 例如,action_show_settings将变为actionShowSettingsb/79642240
  • **破坏性变更:**现在默认情况下参数被认为是非空的。要在字符串和可打包参数上允许空值,请添加app:nullable="true"b/79642307
  • 您现在可以使用app:type="long"和形式为“123L”的defaultValues。b/79563966
  • 现在支持可打包参数,使用完全限定的类名作为app:type。唯一支持的默认值是"@null"b/79563966
  • Args类现在实现了equals()hashCode()b/79642246
  • Safe Args插件现在可以应用于库项目。b/80036553
  • Safe Args插件现在可以应用于特性项目。b/110011752

错误修复

  • 修复了在Fragment生命周期方法期间导航时出现的问题。b/109916080
  • 修复了多次遍历嵌套图时出现的问题。b/110178671
  • 修复了在图中的第一个目标使用setPopUpTo时出现的问题。b/109909461
  • 修复了所有app:defaultValue值都作为字符串传递的问题。b/110710788
  • Android Gradle Plugin 3.2 Beta 01捆绑的aapt2现在为Navigation XML文件中的每个android:name属性添加了保留规则。b/79874119
  • 修复了替换默认FragmentNavigator时的内存泄漏。b/110900142

2018年7月2日

Lifecycle、Room和Paging的AndroidX版本发布版本2.0.0-beta01

Lifecycle

错误修复

  • 修复了LifecycleObserver proguard规则,使其只保留实现,而不是子接口。b/71389427
  • 修复了ViewModel proguard规则,以允许混淆和缩减。

Room

API/行为变更

  • 添加了RoomDatabase.Builder.setQueryExecutor()以允许自定义查询运行位置。
  • 添加了RxJava2 Observable支持。
  • 生成的DAO和数据库实现现在是最终的。

错误修复

  • 在“找不到字段的getter”错误中指定类/字段名称。b/73334503
  • 修复了RoomOpenHelper与旧版本Room的向后兼容性。b/110197391

分页

错误修复

  • 修复了某些预置情况下内容消失的问题(禁用占位符,PositionalDataSource)。b/80149146
  • (已在1.0.1中发布)修复了PagedListAdapterAsyncPagedListDiffer无法发出移动事件导致崩溃的问题。b/110711937

2018年6月26日

分页

Paging 1.0.1已发布,其中包含runtime中的一个错误修复。我们强烈建议使用1.0.1以获得稳定性。Paging RxJava2 1.0.1也已发布,与1.0.0-rc1相同。

错误修复

  • 修复了PagedListAdapterAsyncPagedListDiffer无法发出移动事件导致崩溃的问题。b/110711937

WorkManager

WorkManager 1.0.0-alpha04已发布。

错误修复

  • 使用基于AlarmManager的实现时,PeriodicWorkRequest现在可以正确重新调度。

  • 修复了强制停止或重启后重新调度所有工作程序时可能出现的ANR问题。b/110507716

  • 向各种WorkManager API添加了可空性注释。b/110344065

  • 记录在Worker执行期间发生的未捕获异常。b/109900862

  • 如果您决定回滚到旧版本的WorkManager,则允许破坏性数据库迁移。b/74633270

  • 修复了如果创建重复的隐式标记则发生的迁移崩溃。这是一个非常罕见的问题,只有当您自己使用相同的隐式标记格式时才会发生。

2018年6月19日

Room

Room 1.1.1已发布。此版本与Room 1.1.1-rc1相同。

WorkManager

WorkManager 1.0.0-alpha03已发布。

错误修复

  • 修复了基于AlarmManager的实现中的竞争条件。b/80346526

  • 修复了设备重启后使用JobScheduler时出现重复作业的问题。

  • 具有Content URI触发器的作业现在可以在重启后持久化。b/80234744

  • 文档更新。b/109827628b/109758949b/80230748

  • 修复了重新排队WorkRequest时发生的崩溃。b/109572353

  • 修复了使用work-runtime-ktx依赖项时的Kotlin编译器警告。

  • WorkManager现在使用Room版本1.1.1-rc1

API 更改

  • 添加了getStatusesSync(),这是WorkContinuation.getStatuses()的同步版本。

  • Worker能够区分用户发起的取消和临时操作系统请求的停止。Worker.isStopped()如果已请求任何类型的停止,则返回trueWorker.isCancelled()当工作被显式取消时返回trueb/79632247

  • 在API 28上添加了对JobParameters#getNetwork()的支持。这通过Worker.getNetwork()公开。

  • 添加了Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),以便您可以强制执行可以发送到JobSchedulerAlarmManager的作业数量。这有助于防止WorkManager占用所有可用的JobScheduler插槽。

  • 添加了Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId),这有助于定义WorkManager可以使用的一系列安全的JobScheduler作业ID。b/79996760

  • Worker.getRunAttemptCount()返回给定Worker的当前运行计数。b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)允许您排队唯一的PeriodicWorkRequestb/79600647

  • WorkManager.cancelAllWork()取消所有Worker。依赖于WorkManager的库可以通过使用WorkManager.getLastCancelAllTimeMillis()查询上次调用此方法的时间,以便进一步清理内部状态。

  • 添加了WorkManager.pruneWork() 用于从内部数据库中移除已完成的作业。b/79950952b/109710758

行为变更

  • 为所有WorkRequest添加了一个隐式标签,该标签是Worker的完全限定类名。这使得能够移除没有tagWorkRequest,或者在id不可用时移除它们。b/109572351

破坏性更改

  • Worker.WorkerResult重命名为Worker.Result

  • Worker.onStopped现在有一个**额外**的isCancelled参数,当Worker被显式取消时,该参数设置为true

2018年6月7日

Navigation 1.0.0-alpha02 版本发布。

行为变更

  • FragmentNavigator现在使用setReorderingAllowed(true)b/109826220

  • Navigation现在对从深度链接URL解析的参数进行URL解码。b/79982454

错误修复

  • 修复了从Fragment生命周期方法中调用navigate时出现的IllegalStateExceptionb/79632233

  • Navigation现在依赖于Support Library 27.1.1来修复使用动画时的闪烁问题。b/80160903

  • 修复了当使用defaultNavHost="true"作为子片段时出现的IllegalArgumentExceptionb/79656847

  • 修复了使用NavDeepLinkBuilder时出现的StackOverflowErrorb/109653065

  • 修复了导航回嵌套图时出现的IllegalArgumentExceptionb/80453447

  • 修复了使用launchSingleTop时片段重叠的问题。b/79407969

  • Navigation现在为嵌套图构建正确的合成回退栈。b/79734195

  • 当使用嵌套图作为MenuItem时,NavigationUI现在将突出显示正确的项目。b/109675998

API 更改

  • 操作的clearTask属性以及NavOptions中的相关API已弃用。b/80338878

  • 操作的launchDocument属性以及NavOptions中的相关API已弃用。b/109806636

2018年5月24日

WorkManager 1.0.0-alpha02 版本发布。

WorkManager

错误修复

  • 修复了State.isFinished()上的NullPointerExceptionb/79550068

  • 修复了一个导致WorkerApplication.onCreate()时重新调度的问题。b/79660657

  • 修复了一个允许调度超过操作系统允许数量的工作的问题。b/79497378

  • 将与Worker关联的唤醒锁的清理工作移动到后台线程。

  • AlarmManager实现现在在所有待处理工作完成后正确地进行清理。

  • 修复了影响非英语语言环境的清理SQL查询。b/80065360

  • 添加了对Datafloat的支持。b/79443878

  • Data.Builder.putAll()现在返回一个Builder实例。b/79699162

  • 更多Javadoc和文档修复。b/79691663

API 更改

  • Worker可以对被停止做出反应。Worker.isStopped()可以用来检查Worker是否已被停止。Worker.onStopped()可以用来执行轻量级的清理操作。

  • Worker.getTags() API返回与Worker关联的标签的Set

  • 为使用持续时间和TimeUnit组合的API添加了javax.time.Duration重载。这由@RequiresApi(26)保护。

  • WorkManager扩展已从androidx.work.ktx包移动到androidx.work包。旧的扩展已弃用,将在未来的版本中移除。

  • Configuration.withExecutor()已弃用。请改用Configuration.setExecutor()

2018年5月16日

Paging RxJava2 1.0.0-rc1 和 Room 1.1.1-rc1 发布。如果您正在使用迁移,我们强烈建议使用 Room 1.1.1-rc1 而不是 1.1.0

Room

修复了 Room 无法正确处理迁移后初始化的错误 b/79362399

分页

Paging rxjava2 迁移到候选版本,与初始 alpha 版本相比没有变化。

2018年5月8日

Paging 1.0、Navigation 和 WorkManager Alpha 版、Room 1.1、AndroidX

Paging 1.0.0Room 1.1.0 发布,以及两个新的架构组件 Navigation 和 WorkManager 的 Alpha 版。

自最新候选版本以来,Paging 和 Room 没有变化。

新库:Navigation

Navigation 提供了一个构建应用内导航的框架。此初始版本为 1.0.0-alpha01

新库:WorkManager

WorkManager 简化了保证的、考虑约束的后台工作的调度和执行。此初始版本为 1.0.0-alpha01

AndroidX

架构组件正在迁移到成为 AndroidX 的一部分,包括更新的包名、构件名以及对其他 AndroidX 库的依赖。这些版本在 2.0.0-alpha1 下发布,可与其他 AndroidX 库结合使用。

Kotlin 扩展

ViewModel、ReactiveStreams 和 Sqlite(以前是 Room 的“数据库”组件)都添加了作为 AndroidX alpha 版本一部分的 Kotlin 扩展库。此外,Navigation 和 WorkManager 包含 -ktx 模块。这些扩展模块中的每一个都可以在添加组件中找到。

2018年5月2日

  • Room 1.1.0 候选版本
  • Room 1.1.0-rc1 发布。

错误修复

  • Room 现在与 Kotlin 1.2.40 兼容。b/78328708

2018年4月19日

Paging 候选版本

Paging 1.0.0-rc1 和 Room 1.1.0-beta3 发布。

分页

我们**没有**更多已知问题或计划用于 Paging 1.0.0 版本的新功能。请升级您的项目以使用 1.0.0-rc1 并帮助我们测试它,以便我们可以发布一个非常稳定的 1.0.0 版本。

此版本没有变化,与 1.0.0-beta1 相同。

Room

错误修复

  • 修复了当 Kotlin POJO 引用在 Java 中定义的关系实体时出现的编译错误 b/78199923

2018年4月5日

Room 1.1.0-beta2、Paging 1.0.0-beta1 和 Paging RxJava 1.0.0-alpha1 发布。

Paging 将在进入候选版本之前短暂处于 Beta 阶段。我们不计划对 Paging 1.0 进行进一步的 API 更改,并且任何 API 更改的门槛都非常高。

Paging 的 Alpha RxJava2 支持作为单独的可选模块 (android.arch.paging:rxjava2:1.0.0-alpha1) 发布,并且将在其稳定之前暂时单独进行版本控制。

这个新库提供了一个 RxJava2 替代方案来替代 LivePagedListBuilder,能够构建 ObservableFlowable,使用 Scheduler 而不是 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();

分页

新功能

  • RxPagedListBuilder 通过新的 android.arch.paging:rxjava2 构件添加。

API 更改

  • API 更改以阐明构建器中执行器的作用

    • setBackgroundThreadExecutor() 重命名为 setFetchExecutor()(在 PagedList.BuilderLivePagedListBuilder 中)

    • setMainThreadExecutor() 重命名为 setNotifyExecutor()(在 PagedList.Builder 中)。

  • PagedList.mCallbacks 成员修复为私有。

错误修复

  • LivePagedListBuilder 在指定的执行器上触发初始 PagedList 加载,而不是 Arch Components IO 线程池。

  • 修复了内部 DataSource 包装器中的无效行为(用于实现 DataSource.map,以及禁用占位符的 PositionalDataSource 加载)b/77237534

Room

错误修复

  • 修复了 Room 的 Rx SingleMaybe 实现中的一个严重错误,该错误会提前回收查询,如果您向返回的 SingleMaybe 实例添加多个观察者,则会导致问题。b/76031240

  • 如果在事务内调用RoomDatabase.clearAllTables,则不会VACUUM数据库。b/77235565

2018年3月21日

Room 1.1.0-beta1、Paging 1.0.0-alpha7和Lifecycles 1.1.1已发布。

Room

API 更改

错误修复

  • RoomDatabase.clearAllTables现在尝试通过设置WAL检查点和VACUUM数据库来将空间返还给操作系统。

  • @RawQuery现在接受任何Pojo作为observedEntities属性,只要Pojo通过其Embedded字段或Relation引用一个或多个实体即可。b/74041772

  • Paging:Room的DataSource实现现在可以正确处理多表依赖关系(例如关系和联接)。以前这些会无法触发新结果,或者无法编译。b/74128314

Lifecycles

只有一个小的更改:android.arch.core.util.Function已从arch:runtime移动到arch:common。这允许在没有运行时依赖的情况下使用它,例如在下面的paging:common中。

lifecycle:commonlifecycle:runtime的依赖项,因此此更改不会直接影响lifecycle:runtime,只会影响直接依赖于lifecycle:common的模块,例如Paging。

分页

Paging 1.0.0-alpha7与Lifecycles 1.1.1一起发布。由于Paging alpha7依赖于上面提到的Function类的移动,您需要将lifecycle:runtime依赖项更新为android.arch.lifecycle:runtime:1.1.1

Paging alpha7计划成为Paging发布beta之前的最终版本。

API 更改

  • DataSource.LoadParams对象现在具有公共构造函数,而DataSource.LoadCallback对象现在是抽象的。这使得可以使用模拟回调来包装DataSource或直接测试DataSourceb/72600421
  • DataSource和DataSource.Factory的映射器
    • map(Function<IN,OUT>)允许您转换、包装或装饰DataSource加载的结果。
    • mapByPage(<List<IN>,List<OUT>>)允许对批量处理执行相同的操作(例如,如果从SQL加载的项目需要另外查询单独的数据库,则可以将其作为批量处理)。
  • PagedList#getDataSource()作为一种便捷方法添加b/72611341
  • 所有已弃用的类都已从API中删除,包括recyclerview.extensions包的其余部分和LivePagedListProvider
  • DataSource.Factory已从接口更改为抽象类,以启用映射功能。

错误修复

  • 将构建器更改为final。b/70848565
  • Room DataSource实现现在已修复以处理多表查询 - 此修复包含在Room 1.1.0-beta1中,请参见上文。
  • 修复了如果启用占位符并且总大小是页面大小的精确倍数,则BoundaryCallback.onItemAtEndLoaded不会为PositionalDataSource调用的错误。

2018年3月2日

Room 1.1.0-alpha3已发布。这是Room 1.1.0的最后一个计划的alpha版本。

API 更改

  • InvalidationTrackeraddObserverremoveObserver方法现在是同步的,需要在非UI线程上调用。这可以防止观察表时的某些竞争条件。

  • RoomDatabase类上有一个新的clearAllTables()方法,它将截断所有表的内容。b/63807999

  • SupportSQLiteQuery现在有一个getArgCount()方法,它返回查询参数的数量。b/67038952

错误修复

  • @RawQuery现在已正确支持Paging查询。b/72600425

  • Room现在正确地命名生成的Dao类,以避免当2个或多个Dao接口是同一包中的内部类并且具有相同的名称时发生名称冲突。b/73536380

  • Pojo中的泛型字段类型被正确解析为扩展类的成员。b/73534868

  • 从依赖项工件继承的Dao接口中的查询参数现在已正确解析。b/68118746

  • @Relation生成的查询现在正确地转义字段名称。b/70925483

2018年2月27日

Paging 1.0.0-alpha6与Support Library 27.1.0一起发布。ListAdapter和一些相关类已从Paging库直接移动到Recyclerview,同时还进行了一些重命名以使某些类的功能更清晰。此Paging alpha版本可能是最后一个具有重大API中断更改的版本。

API 更改

  • 移动到recyclerview-v7的类
    • ListAdapter
  • 重命名并移动到recyclerview-v7的类
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • 在paging-runtime中重命名的类
    • PagedListAdapterHelper -> AsyncPagedListDiffer

移动的类与RecyclerView一起使用,独立于Paging库。这意味着它们可以在不依赖Paging alpha版本的情况下使用,但也意味着使用Paging的应用程序必须同时升级到Alpha 6和Support Library 27.1.0。

**Paging Alpha6迁移指南:**

  • 将paging和recyclerview依赖项更新为android.arch.paging:runtime:1.0.0-alpha6com.android.support:recyclerview-v7:27.1.0
    • 必须同时进行这些操作,因为ListAdapter已从Paging移动到RecyclerView
  • 更新ListAdapterHelper的所有引用为AsyncListDiffer
    • getItem(index)/getItemCount()已被删除,取而代之的是调用getCurrentList().getItem(index)getCurrentList().size()的模式,后者更明确。
  • 更新ListAdapterConfig的所有引用为AsyncDifferConfig
  • 更新DiffCallback的所有引用为DiffUtil.ItemCallback
  • 更新PagedListAdapterHelper的所有引用为AsyncPagedListDiffer
  • 更新setList()的引用为submitList()
    • 重命名以阐明列表差异的异步特性

错误修复

  • 修复了在禁用占位符时将不正确的初始位置传递给初始加载的错误。b/73513780

2018年2月15日

Room 1.1.0-alpha2已发布。

新功能

  • Room现在支持在预写日志模式下打开数据库。在此模式下,您的写入将不再阻塞您的读取查询。即使它会消耗更多内存(由于多个连接),此模式通常更快。默认情况下,如果设备是API 16或更高版本并且不是低内存设备,Room将使用WAL。您可以使用setJournalMode()方法在RoomDatabase.Builder上控制此行为。b/67757002

  • **Guava支持:**Room现在支持在DAO查询中返回GuavaOptional<T>ListenableFuture<T>。要使用ListenableFuture<T>,您需要从Room导入guava工件(android.arch.persistence.room:guava:1.1.0-alpha2)。

  • Room现在支持从DAO查询返回java.util.Optional<T>

  • 现在在DAO类中的@Transaction方法中支持具有默认实现的接口方法。这适用于Java 8Kotlinb/72416735

错误修复

  • 如果存在其他可用的构造函数,则带有@Relation的构造函数不会导致编译错误。b/72884434

  • 现在,在@Query方法中使用'转义的表名已针对失效跟踪器正确转义。b/72366965

  • Room现在使用Kotlin @Metadata注解在注解处理期间读取类结构。这意味着,即使POJO继承自依赖项,也可以正确读取其构造函数参数名称。b/67181813

  • 已修复查找降级迁移路径的问题。b/72153525

  • 从现有数据库迁移到Room时,现在可以正确处理非默认列类型。b/71953987

  • Room现在可以正确处理在Kotlin类中持久化boolean?字段。b/72786402

2018年1月22日

发布了Lifecycles 1.1.0、Room 1.1.0-alpha1和Paging 1.0.0-alpha5

Lifecycle 1.1.0

打包更改

现在可以使用新的、更小的依赖项

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

API 更改

  • 移除不推荐使用的LifecycleActivityLifecycleFragment - 请使用FragmentActivityAppCompatActivity或支持Fragment
  • 已向ViewModelProvidersViewModelStores添加@NonNull注解
  • 已弃用ViewModelProviders构造函数 - 请直接使用其静态方法
  • 已弃用ViewModelProviders.DefaultFactory - 请使用ViewModelProvider.AndroidViewModelFactory
  • 已添加静态ViewModelProvider.AndroidViewModelFactory.getInstance(Application)方法,以检索适合创建ViewModelAndroidViewModel实例的静态Factory

Room 1.1.0-alpha1

新功能

  • RawQuery:此新API允许@Dao方法将SQL作为查询参数接收b/62103290b/71458963
  • fallBackToDestructiveMigrationsFromRoomDatabase.Builder中的此新API允许更精细地控制允许破坏性迁移的起始模式版本(与fallbackToDestructiveMigration相比)b/64989640
  • Room现在仅支持较新的Paging API(alpha-4+),放弃对已弃用的LivePagedListProvider的支持。要使用新的Room alpha,您需要使用paging alpha-4或更高版本,如果您尚未这样做,请从LivePagedListProvider切换到LivePagedListBuilder

错误修复

  • 改进了对Kotlin Kapt类型的支持。b/69164099
  • 字段顺序不再使模式失效。b/64290754

Paging 1.0.0-alpha5

错误修复

  • 修复禁用占位符时的页面加载问题b/70573345
  • 用于追踪IllegalArgumentException错误的附加日志记录b/70360195(以及Room端的推测性修复)
  • Javadoc示例代码修复b/70411933b/71467637

2017年12月11日

发布了Paging alpha4-1。这是Paging alpha 4的一个小型错误修复版本。

错误修复

2017年12月7日

发布了Paging alpha4,其中包含重大更改和新增功能,主要针对网络以及网络+数据库用例。

API 更改

  • DataSource现在是一个异步API,以便更轻松地直接从网络进行分页

    • 初始大小和数据的单一入口点
    • 通过保留回调并在稍后调度来支持网络重试
    • 线程安全的回调允许异步加载,以便在UI线程上创建单个基于网络的PagedList
    • 更清晰的初始加载参数错误行为
  • TiledDataSource重命名为PositionalDataSource,以反映其基于位置的索引,以及在禁用占位符时它不会平铺的事实。

  • 添加了PageKeyedDataSource以支持嵌入在网络页面加载中的下一个/上一个令牌。KeyedDataSource重命名为ItemKeyedDataSource以使区别更加清晰。

  • LivePagedListBuilderDataSource.Factory替换了LivePagedListProvider。该构建器提供了相同的功能,但具有更多自定义选项和更简单的默认值。该工厂允许DataSource生成代码独立于LiveData

  • 为数据库+网络用例添加了PagedList.BoundaryCallback

  • PagedList.Builder构造函数现在采用DataSource+PagedList.Config,现在与LivePagedListBuilder更相似,并且允许在Java语言中使用菱形运算符,或在Kotlin中推断类型。

  • 添加了PagedList.getConfig(),并且PagedList.Config现在具有公共成员属性。

  • KeyedDataSource.loadBefore()不再需要反转结果。

  • 添加了PagedListAdapter.onCurrentListChanged()以侦听正在显示哪个PagedList的更新。

错误修复

  • 修复了PagedListAdapter(Helper)中的IndexOutOfBoundsException b/67883658

1.0.0 - 2017年11月6日

所有主要组件(Paging除外)现在都是1.0.0。这与rc1版本完全相同,只是对reactivestreams库进行了一处更改。

错误修复

候选版本 - 2017年10月18日

所有主要工件(Paging除外)现在都是1.0.0-rc1

对于1.0.0版本,我们没有更多已知问题或计划的新功能。请将您的项目升级到1.0.0-rc1,并帮助我们对其进行测试,以便我们可以发布一个稳定可靠的1.0.0版本。

行为变更

  • 在此版本中,当调用onSaveInstanceState时,现在会调度Lifecycle.Event#ON_STOP(之前,它只是被标记为CREATED,而没有调度ON_STOP)。您可以在Lifecycles文档中阅读更多相关信息。

错误修复

  • Room

    • Room现在依赖于最新的xerial工件,该工件修复了编译期间的OutOfMemory问题。b/62473121
    • 现在可以使用@Transaction注解Query方法。有关详细信息,请参阅@Transaction参考文档b/65112315
    • Room中的StringUtil类已从公共API中移除(它从未打算作为公共API)。
  • Lifecycles

    • 当Activity在API < 24上被部分覆盖时,LiveData可以正常工作。b/65665621

    • 如果不可能,现在会正确调用父类中的OnLifecycleEvent方法,或者在编译期间打印警告。b/63474615

    • Lifecycle现在持有对LifecycleOwnerWeakReference,以避免如果Lifecycle在内存中保留的时间比平时长,则泄漏LifecycleOwner(这只是一个预防措施,您仍然应该小心不要泄漏Lifecycle)。

2017年10月9日

发布了Paging alpha-3;这使其与Lifecycles和Room的beta 2版本兼容。

错误修复

  • 改进的Paging文档。

2017年10月5日

所有主要工件(Paging除外)现在都是beta 2。此版本中没有Paging的新版本。

错误修复

  • Lifecycles

    • LiveData不活动时,LiveDataReactiveStreams现在会正确取消订阅源发布者。b/62609183
    • 当父类来自另一个模块时,生命周期事件会正确传播到父类。b/63474615
    • LiveData在订阅创建期间取消订阅时,可以正确处理观察者。b/66337741
    • Java 8语言工件的FullLifecycleObserver现在可在依赖树中使用。b/66525578

    • 对于proguard,请将以下行添加到您的proguard文件中。(在发布1.0.0时将不再需要此操作)

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

    • @Query方法中返回的Pojo具有与查询响应中的任何列都不匹配的@NonNull字段时,Room现在会在编译时打印错误。如果该字段为@Nullable,Room只会打印警告。b/67115337
    • Room现在在较新的操作系统版本中验证索引。b/63132683
    • 如果Pojo中存在多个匹配的构造函数,Room默认选择无参数构造函数。b/67353427
    • 如果单列主键是IntegerLong类型,则可以为Nullableb/67086876
    • 失效跟踪器在测试模式下正确处理重入。b/65471397
    • Room现在在编译时检查列名和表名中的无效字符(无效字符:`")。b/64749111

2017年9月21日

通过此版本,所有架构组件模块都至少达到beta 1版本(新的分页库除外,它是alpha 2)。

我们不计划进行更多API更改。可能会发生非计划的更改,但在1.0.0稳定版之前更改任何API的门槛非常高,不太可能发生。

  • 1.0.0稳定版之前将移除LifecycleActivity和LifecycleFragment。使用Support Library 26.1.0或更高版本时不需要它们。

与alpha阶段不同,beta阶段的时间安排非常短。

版本变更

  • Lifecycle Extensions和Room现在是beta 1
  • Paging现在是alpha 2
  • Lifecycles(运行时,通用)和Arch Core(通用)没有变化。这两个构件自9月13日起版本均为1.0.0

新的构件

  • Lifecycles现在有一个名为common-java8的新构件。此构件包含一个名为DefaultLifecycleObserver的新接口;它对所有Lifecycle方法都有默认实现。如果您使用的是Java 8语言,则应优先使用此构件而不是注解。

    • 由于beta1中的一个bug,您需要添加对android.arch.lifecycle:common:1.0.1模块的显式依赖才能使用新的common-java8构件。此问题将在beta2中修复。

打包更改

  • android.arch.persistence.room.db已移动到android.arch.persistence.db
  • android.arch.persistence.room.db-impl已移动并重命名为android.arch.persistence.db-framework

Room已经依赖这两个构件,所以除非您直接使用它们,否则您不需要更改构建文件中的任何内容。

API 更改

  • Room

    • @ColumnInfo 注解现在支持在列上设置排序规则。b/62007004
    • 除非使用@ColumnInfo@Embedded@Relation注解,否则现在默认忽略transient字段。b/62600692
    • 主键必须使用@NonNull注解,除非它们是自动生成的。b/64292391
      • 此更改可能需要架构迁移。对于由此带来的不便,我们深感抱歉。
    • 添加了一个新的便捷注解(@Transaction),它覆盖DAO方法并在事务中运行它。
  • 支持SQLite数据库

  • 分页

    • 改进的分页文档,包含更多示例和线程注释。

错误修复

  • Room
    • 正确处理@Query方法中的Kotlin多行字符串。b/65809374
  • 分页

1.0.0 Alpha 9-1 - 2017年9月13日

这是一个主要版本,其中核心生命周期构件(运行时,通用)和arch core(通用)达到稳定的1.0.0版本。

随着此更改,Support Library 26.1.0现在依赖于这些库。AppCompatActivitySupport Fragment现在都实现了LifecycleOwner接口。

此版本还依赖于Support Library 26.1.0以利用新的集成。

新库:Paging

此版本还包括一个名为Paging的新库,它允许在必要时轻松地将大型数据集以块的形式加载到RecyclerView中。Paging发布为alpha1,并将拥有自己的发布周期。

API 更改

错误修复

  • 如果应用程序在类路径中具有注解,则生成的类现在使用@Generated进行注解。b/35754819

  • 修复了MediatorLiveData的观察者比较错误。b/64413274

  • 现在支持使用[LiveData]的SQLite WITH查询。[ref-LiveData] b/62510164

  • 修复了一个错误,即如果观察多个表,InvalidationTracker不会发送正确的列表。b/65099281

  • 修复了Room在Windows上生成不同文件的错误。b/64470691

  • 现在支持根包中的LifecycleObservers。b/62310817

1.0.0 Alpha 9 - 2017年8月16日

错误修复

  • 修复了LiveData中的一个错误,即当第一个观察者从其onChanged方法中移除时,第二个Observer被忽略。b/64285805

1.0.0 Alpha 8 - 2017年8月1日

行为变更

  • 为原始类型列或使用NonNull注解的列添加了NOT NULL约束。这会更改表的结构,因此,如果您已经在使用Architecture Components alpha 7或更早版本,则需要实现迁移才能保留数据,或者在构建器中使用fallbackToDestructiveMigration()方法。b/62007004

API 更改

1.0.0 Alpha 7 - 2017年7月26日

错误修复

1.0.0 Alpha 6 - 2017年7月25日

行为更改

  • LifecycleObserver调用的顺序已更改。以前,观察者总是按照添加顺序调用:如果observer1observer2之前添加,它将先于observer2接收ON_CREATE和所有其他事件。这对于销毁事件不再适用,对于销毁事件,观察者按照添加的反向顺序调用。因此,当前行为是:如果observer1observer2之前添加,则ON_CREATE首先发送到observer1,然后发送到observer2ON_STARTON_RESUME也是如此),但ON_PAUSE事件首先发送到observer2,然后发送到observer1ON_STOPON_DESTROY也是如此)。

  • 如果缺少迁移,Room会抛出异常。以前Room只会清除数据库,但现在它会崩溃。开发人员可以通过调用构建器API选择清除行为。b/63872392

API 更改

  • RoomDatabase.Builder添加了fallbackToDestructiveMigration()方法,如果缺少迁移,则清除数据库。b/63872392

  • 架构组件现在依赖于support library 26.0.0

错误修复

1.0.0 Alpha 5 - 2017年7月18日

API 更改

您需要依赖android.arch.persistence.room:rxjava2构件才能向Room添加RxJava支持。

错误修复

  • 修复了没有任何参数的@Delete查询。b/63608092

  • 修复了Room对getter和setter的类型检查。b/63733651

1.0.0 Alpha 4 - 2017年7月11日

API 更改

  • RoomDatabase添加了一个新的便捷方法(runInTransaction())。

  • @Insert@Delete@Update方法现在可以具有来自不同实体类型的参数。b/62682405

错误修复

  • 修复了byte[]@Dao方法中的处理。b/62460045

  • Room中的迁移检查现在使用不区分大小写的比较。b/62875382

  • 修复了Lifecycles构件的proguard配置。b/62113696

1.0.0 Alpha 3 - 2017年6月15日

API 更改

  • @OnLifecycleEvent现在只支持一个事件参数。这是为Java 8支持做准备的更改,以便我们将来可以迁移到具有默认方法的接口。与此更改相关,只有使用@OnLifecycleEvent(ON_ANY)注解的方法才能接收类型为Event的第二个参数(第一个参数是LifecycleOwner)。有关详细信息,请参阅Lifecycle文档。

  • LifecycleActivityLifecycleFragment类已移动到android.arch.lifecycle:extensions构件中。

  • 为了能够从测试资源读取模式并创建应用程序上下文中的数据库,MigrationTestHelper 接收 Instrumentation 实例,而不是 Context

  • @DAO 方法中的 @Insert@Delete@Update 注解现在可以将 Iterable 作为参数类型。 b/62259820

错误修复

  • 覆盖的生命周期事件方法不再被多次调用。

  • 现在可以正确处理多个 IN 参数。 b/62608681

  • 抽象 DAO 类现在可以拥有一个接收 @Database 实例的构造函数。 b/38488747

  • DAO 现在可以拥有带有类型参数的超类/接口。 b/62103620

1.0.0 Alpha 2 - 2017年6月2日

API 更改

错误修复

  • 用于生命周期的 Proguard 文件。(b/62113696
  • 使用类型转换器导致数据丢失。(b/62100716
  • 允许从 @Insert 查询返回 Long[]

1.0.0 Alpha 1 - 2017年5月17日

最低SDK版本 14

常规建议

  • 虽然我们在发布前进行了大量的测试,但架构组件 目前仍处于 Alpha 阶段。如果您正在构建生产应用,请注意 API 将在 1.0 版本发布之前发生更改,并且可能不够健壮。如果您不习惯调试所用库中的问题,建议您先在副项目中尝试架构组件。

  • 我们不建议每个人现在都迁移。我们将为架构组件的 1.0 版本准备好迁移指南。

已知限制和问题