架构组件发行说明存档

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() 调用。这种方法在 2018 年 AndroidDevSummit 上的“单一活动”演讲 中进行了详细讨论,我们将针对使用 Navigation 进行测试编写其他文档。

新功能

  • MenuItem带有menuCategory="secondary" 将不再在与 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 插件 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 2.1.0-rc01 已发布,与 2.1.0-beta01 没有变化。

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

新功能

  • 目的地标签在与 NavigationUI 方法一起使用时,现在将自动将 {argName} 实例替换为您的 android:label 中的正确参数 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 现在使用 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 创建委托给 FragmentFactory 变得更容易。 b/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

错误修复

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。要修复任何构建问题,您可以将现有的 varargs 包裹在 Arrays.asList(...) 中。我们仍然包含每个方法的单参数版本。这是一个破坏性变更。
  • 删除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们提供了令人困惑的 API;现有的 combine 方法更容易理解。这是一个破坏性变更。

错误修复

  • Marshmallow 之前的实现现在在恢复已执行任务的进程死亡方面更加可靠。
  • 通过 observeForever 观察的 LiveData 由 WorkManager 跟踪。这是一个 Room 库修复程序的回退。 b/74477406
  • Data.Builder.build() 现在在序列化对象超过其最大大小时抛出异常。以前,这只会发生在后台线程中,您无法正确处理它。
  • 进一步区分了已停止与已取消的工作; getWorkInfoById() 将在 ListenableWorker.onStopped() 期间返回带有 CANCELLED StateWorkInfo
  • null Result 视为 ListenableWorker 中的错误。 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 的 getter 和 setter 方法。
  • 添加了 Operation.await()ListenableFuture.await() Kotlin 扩展方法。
  • Operation.getException() 重命名为 Operation.getThrowable()
  • ContentUriTriggers 类以及引用它的方法不再对公众开放。
  • 为了简化 API,已删除 WorkManagerWorkContinuationOneTimeWorkRequest 中的剩余可变参数方法。要解决任何构建问题,您可以将现有可变参数用 Arrays.asList(...) 包裹起来。我们仍然包含每个方法的单参数版本。
  • 已删除 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们提供了一个令人困惑的 API;现有的 combine 方法更容易理解。

2018 年 12 月 4 日

Room

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

API 更改

  • @Fts3/@Fts4 中的 FTS tokenizer 现在接受 String 而不是枚举。这允许 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 拒绝其他各种 Collection 实现作为 IN 表达式的参数。 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 以排队唯一的 OneTimeWorkRequest,而无需创建 WorkContinuation
  • 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 工件 中,不再发布。
  • navigation-testing 工件现在依赖于 Kotlin 标准库。API 已更改为更符合 Kotlin 约定,但您仍然可以将其用于用 Java 编写的测试。
  • 不再支持元数据清单注册的导航图。 b/118355937
  • 不再允许将操作附加到 <activity> 目的地。 aosp/785539

错误修复

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

Safe Args

  • Safe Args 现在对 Android Gradle 插件 3.2.1 有固定的依赖关系。 b/113167627
  • 现在可以为内部类生成方向。 b/117407555
  • 修复了生成指向 <include> 图的方向的问题。 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() 变体,它接受一个附加回调,如果/当分页列表在 diff 后显示时,该回调会触发。这使您可以将 PagedList 交换与其他 UI 更新同步。 b/73781068
  • PagedList.getLoadedCount() 添加,让您知道内存中有多少个项目。请注意,如果禁用占位符,返回值始终等于 .size()

错误修复

  • 修复了 diff 列表时,如果列表被重用,则会发生竞争条件。 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 现在可以在自动值注释的类的抽象方法中声明。请注意,这些注释还必须附带 @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/行为更改

  • mCallbackmDatabase 现在在 RoomDatabase@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

  • 导航目标 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 更改

  • 您现在可以通过在 WorkManager.Configuration 中指定 WorkerFactory 在运行时创建自己的 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 日

AndroidX 版本的 Lifecycle、Room 和 Paging 发布版本 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
  • 修复了在使用 JobScheduler 时双重调度 PeriodicWorkRequest 的问题。 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 保存状态后忽略导航操作,避免出现“Can not perform this action after onSaveInstanceState”异常 b/110987825

Safe Args

  • 重大变更: 操作和参数名称中的非字母数字字符将替换为相应的 NavDirections 方法名称中的骆驼式命名
    • 例如,DemoController.index 将变为 setDemoControllerIndex b/79995048
    • 例如,action_show_settings 将变为 actionShowSettings b/79642240
  • 重大变更: 参数现在默认被视为非空。 要允许字符串和可解析参数上的空值,请添加 app:nullable="true" b/79642307
  • 您现在可以在默认值中使用 app:type="long",形式为“123L” 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 插件 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 时出现重复作业的问题。

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

  • 文档更新。 b/109827628, b/109758949, b/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) 允许您排队唯一的 PeriodicWorkRequests。 b/79600647

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

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

行为变更

  • 为所有 WorkRequests 添加了一个隐式标签,它是 Worker 的完全限定类名。 这允许您在没有 tags 或无法获得 id 的情况下删除 WorkRequests。 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 生命周期方法调用导航时发生的 IllegalStateExceptionb/79632233

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

  • 修复了在使用 defaultNavHost="true" 作为子片段时发生的 IllegalArgumentExceptionb/79656847

  • 修复了使用 NavDeepLinkBuilder 时发生的 StackOverflowErrorb/109653065

  • 修复了在导航回嵌套图时发生的 IllegalArgumentExceptionb/80453447

  • 修复了在使用 launchSingleTop 时发生片段重叠的问题。 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

  • 修复了导致 Workers 在 Application.onCreate() 上重新安排的问题。 b/79660657

  • 修复了您可以安排超出操作系统允许的工作量的问题。 b/79497378

  • 将与 Workers 相关的唤醒锁的清理移至后台线程。

  • 当所有待处理的工作完成时,AlarmManager 实现现在可以正确清理。

  • 修复了影响非英语地区的清理 SQL 查询。 b/80065360

  • Data 中添加了对 float 的支持。 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 已发布,还有两个新的 Architecture Components 的 alpha 版本 - Navigation 和 WorkManager。

自上次发布候选版本以来,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 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) 发布,并且将在稳定之前暂时单独进行版本控制。

这个新库提供了 LivePagedListBuilder 的 RxJava2 替代方案,能够构建 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 现在已针对分页查询提供适当的支持。 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 与支持库版本 27.1.0 一起发布。 ListAdapter 和一些相关类已从 Paging 库直接移动到 Recyclerview,同时还进行了一些重命名,使某些类的功能更加清晰。 这一版的 Paging 预计将是最后一次进行重大 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 和支持库 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.IttemCallback
  • 将所有对 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 查询中返回 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 8Kotlin 都适用。 b/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
  • 已将 @NonNull 注释添加到 ViewModelProvidersViewModelStores
  • 已弃用 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)。您可以在生命周期文档中了解更多信息。

错误修复

  • Room

  • 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

    • LiveDataReactiveStreams 现在能够在 LiveData 不活跃时,正确地取消订阅源发布者。 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
    • Room 默认选择无参构造函数,如果 Pojo 中存在多个匹配的构造函数。 b/67353427
    • 如果单列主键是 IntegerLong,则可以是 Nullableb/67086876
    • 失效跟踪器在测试模式下能够正确地处理重新进入。 b/65471397
    • Room 现在在编译时检查列名和表名中的无效字符(无效字符:`")。 b/64749111

2017 年 9 月 21 日

在这个版本中,所有 Architecture Components 模块都至少达到 beta 1 版本(除了新的 Paging 库,它是 alpha 2)。

我们不计划进行更多 API 变更。可能会出现非计划的变更,但变更任何 API 在 1.0.0 稳定版本发布之前的难度很大,并且不太可能发生。

  • LifecycleActivity 和 LifecycleFragment 将在 1.0.0 稳定版本发布之前被移除。在使用 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 中的一个错误,您需要在依赖关系中明确添加对 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 文档,添加了更多示例和线程注解。

错误修复

  • Room
    • @Query 方法中的 Kotlin 多行字符串能够被正确地处理。 b/65809374
  • 分页
    • Paging 构件不再依赖于 junit。 b/65690261

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 中的一个错误,即第二个 Observer 在第一个观察者从其 onChanged 方法中移除时会被忽略。 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 之前添加,它将接收 ON_CREATE 和所有其他事件,然后再接收 observer2。对于销毁事件,这种情况不再成立,观察者的调用顺序与添加顺序相反。因此,当前的行为是:如果 observer1observer2 之前添加,那么 ON_CREATE 将首先发送给 observer1,然后发送给 observer2ON_STARTON_RESUME 的情况相同),但是 ON_PAUSE 事件将首先发送给 observer2,然后才发送给 observer1ON_STOPON_DESTROY 的情况相同)。

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

API 更改

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

  • 架构组件现在依赖于支持库 26.0.0

错误修复

1.0.0 Alpha 5 - 2017 年 7 月 18 日

API 更改

您需要依赖于 android.arch.persistence.room:rxjava2 工件将 RxJava 支持添加到 Room 中。

错误修复

  • 修复了没有任何参数的 @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 现在只支持 1 个事件参数。这是为了准备对 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 更改

错误修复

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

1.0.0 Alpha 1 - 2017 年 5 月 17 日

MinSDK 14

一般建议

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

  • 我们不建议每个人都立即迁移。我们将在架构组件的 1.0 版本发布时提供迁移指南。

已知限制和问题