Architecture Components 发布说明归档

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 日

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

我们已决定不再继续开发 android.arch.navigation:navigation-testing 工件。尽管它对 NavController 的内部测试有所帮助,但我们强烈建议采用替代测试策略,例如模拟 NavController 实例以验证是否正在执行正确的 navigate() 调用。这种方法在 AndroidDevSummit 2018 上的 Single Activity 讲座中详细讨论,我们将致力于提供更多关于 Navigation 测试的特定文档。

新功能

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

破坏性更改

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

错误修复

  • 参数现在可以正确地从深度链接中解析为正确的 argType,而不是始终解析为字符串 b/110273284
  • Navigation 现在正确导出了其公共资源 b/121059552
  • Safe Args 现在与 Android Gradle 插件 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 日

Paging

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

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

新功能

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

破坏性更改

  • OnNavigatedListener 已重命名为 OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener 现在也传递参数的 Bundle aosp/837142
  • app:clearTaskapp:launchDocument 属性及其相关方法已被移除。使用 app:popUpTo 和您的图的根目录来从返回堆栈中移除所有目的地。b/119628354
  • ActivityNavigator.Extras 现在使用 Builder 模式,并增加了设置任何 Intent.FLAG_ACTIVITY_ 标志的功能 aosp/828140
  • NavController.onHandleDeepLink 已重命名为 handleDeepLink aosp/836063
  • 许多不适合子类化的类和方法,例如 NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration,已被设置为 final aosp/835681
  • 已移除已弃用的 NavHostFragment.setGraph() 方法 aosp/835684
  • 已移除已弃用的 NavigationUI.navigateUp(DrawerLayout, NavController) 方法。aosp/835684
  • Fragment 创建已移至 FragmentNavigator,使其更容易将 Fragment 创建委托给 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

错误修复

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

Safe Args

  • Safe Args 支持可序列化对象,包括 Enum 值。Enum 类型可以通过使用不带类名的枚举字面值(例如 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 更改”部分。此版本很可能作为我们的第一个 beta 版发布。alpha12 还包含广泛的文档更新。

API 更改

  • 一个新的工件 work-rxjava2 引入了 RxWorker。这是一个需要 Single<Payload>ListenableWorker
  • 由于 Firebase JobDispatcher 即将弃用,因此已移除对其的支持。这意味着 work-firebase 工件在进入 beta 版后将不再更新。我们将在未来考虑添加替代方案。
  • 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 中其余的变长参数方法,以简化 API。要修复任何构建问题,您可以将现有变长参数封装在 Arrays.asList(...) 中。我们仍然包含每个方法的单参数版本。这是一项破坏性更改。
  • 移除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们呈现了一个令人困惑的 API;现有的 combine 方法更易于理解。这是一项破坏性更改。

错误修复

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

破坏性 API 更改

  • 由于 Firebase JobDispatcher 即将弃用,因此已移除对其的支持。这意味着 work-firebase 工件在进入 beta 版后将不再更新。我们将在未来考虑添加替代方案。
  • Payload 合并到 Result 中。Result 现在是一个“密封类”,具有三个具体实现,您可以通过 Result.success()(或 Result.success(Data))、Result.failure()(或 Result.failure(Data))和 Result.retry() 获取它们。您的 ListenableFuture 现在返回 Result 而不是 PayloadWorker 没有用于输出 Data 的 getter 和 setter 方法。
  • 添加了 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 现在接受 String 而不是 Enum。这允许 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 更改

  • 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() 以前返回数组。现在这些方法返回 Collection。这是一项破坏性更改。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()这是一项破坏性更改。
  • WorkStatus 的构造函数不再是公共 API 的一部分。这是一项破坏性更改。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()这是一项破坏性更改。
  • 在公共 API 中添加了许多 @NonNull 注解,以改善 API 的人体工程学。
  • 添加 WorkManager.enqueueUniqueWork() API,用于排队唯一 OneTimeWorkRequest,而无需创建 WorkContinuation
  • WorkManagerenqueuecancel 方法的所有变体现在都返回一个新的 Operation 类型。这是一项破坏性更改。
  • enqueue 的所有变体不再接受 WorkRequest 的变长参数。这是一项破坏性更改。请改用 Collection。您可以使用 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() 以前返回数组。现在这些方法返回 Collections。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()
  • WorkStatus 的构造函数不再是公共 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManagerenqueuecancel 方法的所有变体现在都返回一个新的 Operation 类型。
  • enqueue 的所有变体不再接受 WorkRequest 的变长参数。
  • 尝试在每个进程中多次 initialize WorkManager 现在将导致 IllegalStateException

2018 年 11 月 1 日

Paging

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 工件现在依赖于 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

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() 变体,这些变体接受一个额外的回调,该回调在分页列表显示后(在差异比较之后)触发。这允许您将分页列表交换与其他 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 更改

  • 移除了所有以前 deprecated 的方法和类,特别是默认的 Worker 构造函数。这是一项破坏性 API 更改。
  • NonBlockingWorker 重命名为 ListenableWorker,它现在是一个未隐藏的公共类,可以投入使用。
    • ListenableWorker 提供对一个抽象方法 ListenableFuture<Payload> onStartWork() 的访问,该方法在主线程上调用。由您决定异步启动和处理工作。完成后,您应该适当更新 ListenableFuture。参考实现 ListenableFutures 在 alpha02Futures 包中提供(参见 WorkManager 部分下方)。
    • Worker 扩展了 ListenableWorker,并且仍然像以前一样运行,带有一个抽象的 Result doWork() 方法。
    • 将一些方法和成员从 Worker 转移到 ListenableWorker
    • 我们很快将为使用 Kotlin 协程(一旦稳定版本发布)和 RxJava2 的 ListenableWorker 提供参考实现。
  • 接口 WorkerFactory 和具体实现 DefaultWorkerFactory 已合并为一个名为 WorkerFactory 的抽象类。该实现确保对于任何用户创建的 WorkerFactory 实例,默认的基于反射的行为都会作为最后的尝试被调用。这是一项破坏性更改。
  • 移除了 WorkManager.synchronous()WorkContinuation.synchronous() 以及所有相关方法。在 API 中将 ListenableFuture<Void> 添加为许多方法的返回类型。这是一项破坏性 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 更改

  • 移除了所有以前 deprecated 的方法和类,特别是默认的 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 现在可以在自动值注解类的抽象方法中声明。请注意,这些注解还必须附带 @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 已发布,并修复了一个错误。

Paging

错误修复

  • 修复了使用 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

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

2018 年 9 月 19 日

WorkManager

WorkManager 1.0.0-alpha09 已发布,包含错误修复、基础设施更新和 API 更改。

已知问题

如果您遇到以下问题:“找到多个具有 OS 独立路径 '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 已发布,修复了错误。

错误修复

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

  • 破坏性更改: app:type 已更改为 app:argType,以避免与 ConstraintLayout 2.0.0-alpha1 等其他库发生冲突 b/111110548
  • Safe Args 的错误消息现在可以点击 b/111534438
  • Args 类现在确认 NonNull 属性实际上不是 null b/111451769
  • 已将额外的 NonNull 注解添加到 NavDirections 和 Args 生成的类中 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
  • FragmentNavigator 现在会在 FragmentManager 保存状态后忽略导航操作,从而避免“无法在 onSaveInstanceState 后执行此操作”异常 b/110987825

Safe Args

  • 破坏性更改:操作和参数名称中的非字母数字字符将在相应的 NavDirections 方法名称中替换为驼峰式命名
    • 例如 DemoController.index 将变为 setDemoControllerIndex b/79995048
    • 例如 action_show_settings 将变为 actionShowSettings b/79642240
  • 破坏性更改:参数现在默认被视为非空。要允许字符串和 Parcelable 参数为空值,请添加 app:nullable="true" b/79642307
  • 您现在可以使用 app:type="long" 并以“123L”的形式设置默认值 b/79563966
  • Parcelable 参数现在受支持,使用完全限定类名作为 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 值都作为 String 传递的问题 b/110710788
  • Android Gradle Plugin 3.2 Beta 01 中捆绑的 aapt2 现在为 Navigation XML 文件中的每个 android:name 属性添加了 keep 规则 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 和 Database 实现现在是 final

错误修复

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

Paging

错误修复

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

2018 年 6 月 26 日

Paging

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

  • 记录在工作器执行期间发生的未捕获异常。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 时出现重复作业的问题。

  • 带有内容 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),这有助于定义 JobScheduler 作业 ID 的范围,以便 WorkManager 安全使用。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 的完全限定类名。这允许在没有 tagid 不可用时移除 WorkRequestb/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 生命周期方法调用导航时出现的 IllegalStateExceptionb/79632233

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

  • 修复了在子 fragment 中使用 defaultNavHost="true" 时出现的 IllegalArgumentExceptionb/79656847

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

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

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

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

  • NavigationUI 现在在使用嵌套图作为 MenuItem 时,将高亮显示正确的项目。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

  • 添加了 javax.time.Duration 的重载,用于接受持续时间和 TimeUnit 组合的 API。这由 @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

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 的“Database”组件)都已添加 Kotlin 扩展库,作为 AndroidX alpha 版本的一部分。此外,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

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();

Paging

新功能

  • 通过新的 android.arch.paging:rxjava2 工件添加了 RxPagedListBuilder

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

生命周期

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

lifecycle:commonlifecycle:runtime 的依赖项,因此此更改不会直接影响 lifecycle:runtime,只会影响直接依赖于 lifecycle:common 的模块,就像 Paging 所做的那样。

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 已从接口更改为抽象类,以实现映射功能。

错误修复

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

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 现在已正确支持分页查询。b/72600425

  • Room 现在正确命名生成的 Dao 类,以避免当两个或更多 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 迁移指南:**

  • 将分页和 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.IttemCallback
  • PagedListAdapterHelper 的所有引用更新为 AsyncPagedListDiffer
  • setList() 的引用更新为 submitList()
    • 重命名以澄清列表差异的异步性质

错误修复

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

2018 年 2 月 15 日

Room 1.1.0-alpha2 发布。

新功能

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

  • Guava 支持:Room 现在支持在 DAO 查询中返回 Guava Optional<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/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom:RoomDatabase.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/70411933, b/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 版本。

行为变更

  • 在此版本中,Lifecycle.Event#ON_STOP 现在在调用 onSaveInstanceState 时调度(以前,它仅标记为 CREATED 而不调度 ON_STOP)。您可以在生命周期文档中阅读更多相关信息。

错误修复

  • Room

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

    • 在 API < 24 的设备上,当 Activity 部分被覆盖时,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 版本。

错误修复

  • 生命周期

    • 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

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

2017 年 9 月 21 日

在此版本中,所有 Architecture Components 模块都至少达到 beta 1(新 Paging 库为 alpha 2 除外)。

我们不打算再进行任何 API 更改。可能会发生意外更改,但在 1.0.0 稳定版发布之前更改任何 API 的门槛非常高,不太可能发生。

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

与 alpha 阶段不同,beta 阶段的持续时间计划非常短。

版本变更

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

新工件

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

    • 由于 beta1 中的一个错误,您需要添加对 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
    • transient 字段现在默认情况下会被忽略,除非它们使用 @ColumnInfo@Embedded@Relation 进行注解。b/62600692
    • 主键必须使用 @NonNull 进行注解,除非它们是自动生成的。b/64292391
      • 此更改可能需要模式迁移。对此造成的不便深表歉意。
    • 添加了一个新的便捷注解 (@Transaction),它覆盖 DAO 方法并在事务内部运行。
  • 支持 SQLite 数据库

  • Paging

    • 改进了 Paging 文档,提供了更多示例和线程注解。

错误修复

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

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

这是一个主要版本,其中核心生命周期工件(runtime、common)和 arch core(common)达到稳定版本 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

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

  • 修复了 InvalidationTracker 在观察多个表时不会发送正确列表的错误。b/65099281

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

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

1.0.0 Alpha 9 - 2017 年 8 月 16 日

错误修复

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 之前添加,它将先接收 ON_CREATE 和所有其他事件,然后才轮到 observer2。对于销毁事件,情况不再如此,观察者将按添加顺序的逆序调用。因此,当前行为是:如果 observer1observer2 之前添加,则 ON_CREATE 将首先发送给 observer1,然后发送给 observer2ON_STARTON_RESUME 也会发生同样的情况),但 ON_PAUSE 事件将首先发送给 observer2,然后才发送给 observer1ON_STOPON_DESTROY 也会发生同样的情况)。

  • Room 在缺少迁移时会抛出异常。以前 Room 只会清除数据库,但现在它会崩溃。开发者可以通过调用 builder API 来选择清除行为。b/63872392

API 更改

  • RoomDatabase.Builder 添加了 fallbackToDestructiveMigration() 方法,用于在缺少迁移时清除数据库。b/63872392

  • Architecture Components 现在依赖于 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

错误修复

  • 修复了 @Dao 方法中 byte[] 的处理。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,以便能够从测试资产中读取模式并在应用程序上下文中创建数据库。

  • @Insert@Delete@Update 注解在 @DAO 方法中现在可以将 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
  • Type Converters 导致数据丢失。(b/62100716
  • 允许从 @Insert 查询返回 Long[]

1.0.0 Alpha 1 - 2017 年 5 月 17 日

MinSDK 14

一般建议

  • 尽管我们在发布前进行了大量测试,但 Architecture Components 目前仍处于 Alpha 阶段。如果您正在构建生产应用,请注意 API 在 1.0 版本发布之前会发生变化,并且可能不够健壮。如果您不习惯调试所用库中的问题,我们建议您先在辅助项目中尝试 Architecture Components。

  • 我们不建议所有人立即迁移。我们将在 Architecture Components 1.0 版本发布时准备好迁移指南。

已知限制和问题