2019 年 1 月 15 日
WorkManager
发布了 WorkManager 1.0.0-beta02
。此版本修复了一些问题。
bug 修复
- 修复了极端情况下的一个问题,即在搭载 Android 6.0(API 级别 23)的设备上,定期工作可能会在每个间隔内运行多次。b/121998363
- 修复了搭载 Android 5.1(API 级别 22)或更低版本的设备上出现的
ConcurrentModificationException
。b/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 保持稳定(除非出现严重问题)。此版本修复了一些 bug。
bug 修复
- 如果之前取消的工作是已成功完成的父级工作的子级,则该子级将不再运行。b/120811767
- 日志记录类现可正确初始化(之前的问题主要在测试期间出现)。
2018 年 12 月 18 日
Navigation
发布了 Navigation 1.0.0-alpha09
。此版本包含重大 API 变更;请参阅下面的“重大变更”部分。
我们已选择不继续开发 android.arch.navigation:navigation-testing
制品。虽然经证实该制品对 NavController
的内部测试有帮助,但我们仍强烈建议使用其他测试策略,例如模拟 NavController
实例以验证是否已完成正确的 navigate()
调用。2018 年 Android 开发者峰会的 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
方法保持一致。您可以将menuCategory="secondary"
添加到MenuItem
来避免弹出返回堆栈。aosp/852869- 生成的
Args
类的fromBundle()
方法现在接受非 nullBundle
,而不是可为 null 的Bundle
aosp/845616
bug 修复
- 参数现在可以从深层链接中正确解析为正确的
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
发布了 Navigation 1.0.0-alpha08
。此版本包含重大 API 变更;请参阅下面的“重大变更”部分。
新功能
- 当目标标签与
NavigationUI
方法一起使用时,系统现在会自动将android:label
中的{argName}
实例替换为正确的参数 b/80267266 - Navigation 现在依赖于支持库 28.0.0 b/120293333
重大变更
OnNavigatedListener
已重命名为OnDestinationChangedListener
b/118670572OnDestinationChangedListener
现在也传递参数的Bundle
aosp/837142- 移除了
app:clearTask
和app:launchDocument
属性及其关联的方法。使用app:popUpTo
与图表的根目录从返回堆栈中移除所有目标。b/119628354 ActivityNavigator.Extras
现在使用Builder
模式,并添加了设置任何Intent.FLAG_ACTIVITY_
标记的功能 aosp/828140NavController.onHandleDeepLink
已重命名为handleDeepLink
aosp/836063- 许多不适合子类化的类和方法(如
NavOptions
、NavInflater
、NavDeepLinkBuilder
和AppBarConfiguration
)已设为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
bug 修复
- 当目标是
<navigation>
元素时,popUpTo
现在可以一致地工作 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 更改”部分。此版本很可能会作为我们的第一个 Beta 版发布。alpha12
还包含大量的文档更新。
API 变更
- 一个新工件 (
work-rxjava2
) 引入了RxWorker
。这是一个需要Single<Payload>
的ListenableWorker
。 - 由于即将废弃 Firebase JobDispatcher,因此停止了对它的支持。这意味着,当我们进入测试阶段时,
work-firebase
工件将不再更新。我们将考虑在未来添加它的替代品。 - 将
Payload
组合到了Result
中。Result
现在是一个“密封的类”,它有三个具体实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获取这些实现。您的ListenableFuture
现在的结果是Result
而不是Payload
。Worker
没有用于输出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
类以及引用它的方法不再可供公共使用。这是一项重大变更。- 在
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中移除了 varargs 方法的剩余部分以简化 API。要解决任何编译问题,您可以使用Arrays.asList(...)
封装现有的 varargs。我们仍然会包含每个方法的单参数版本。这是一项重大变更。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们之前呈现的 API 令人困惑,而现有的combine
方法更容易理解。这是一项重大变更。
bug 修复
- 现在,在恢复已执行任务的终止进程时,版本低于 Marshmallow 的实现更加可靠。
- 通过
observeForever
观察到的LiveData
会通过 WorkManager 进行跟踪。这是 Room 库修复的向后移植。b/74477406 - 如果序列化对象超过其大小上限,
Data.Builder.build()
现在会抛出异常。之前这种情况只发生在后台线程,因此您无法正确处理这种问题。 - 进一步区分了“停止”操作和“取消”操作,
getWorkInfoById()
将在ListenableWorker.onStopped()
期间返回具有CANCELLED
State
的WorkInfo
。 - 在
ListenableWorker
中将null
Result
视为失败。b/120362353 - 对运行 API 24 且有时抛出
IllegalArgumentException
的 Shield Tablets 进行了推测性修复。b/119484416
重要 API 更改
- 由于即将废弃 Firebase JobDispatcher,因此停止了对它的支持。这意味着,当我们进入测试阶段时,
work-firebase
工件将不再更新。我们将考虑在未来添加它的替代品。 - 将
Payload
组合到了Result
中。Result
现在是一个“密封的类”,它有三个具体实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获取这些实现。您的ListenableFuture
现在的结果是Result
而不是Payload
。Worker
没有用于输出Data
的 getter 和 setter 方法。 - 添加了
Operation.await()
和ListenableFuture.await()
Kotlin 扩展方法。 - 已将
Operation.getException()
重命名为Operation.getThrowable()
。 ContentUriTriggers
类以及引用它的方法不再可供公共使用。- 在
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中移除了 varargs 方法的剩余部分以简化 API。要解决任何编译问题,您可以使用Arrays.asList(...)
封装现有的 varargs。我们仍然会包含每个方法的单参数版本。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们之前呈现的 API 令人困惑,而现有的combine
方法更容易理解。
2018 年 12 月 4 日
Room
发布了 Room 2.1.0-alpha03
,该版本支持协程,并修复了几个问题。
API 变更
@Fts3
/@Fts4
中的 FTStokenizer
现在接受字符串而不是枚举。这允许 Room 使用自定义分词器。内置分词器仍在FtsOptions
中定义为字符串常量。b/119234881
新功能
- 协程:DAO 方法现在可以是挂起函数。为了在 Room 中支持挂起函数,发布了一个新的制品,即
room-coroutines
。b/69474692 - 带有
@Insert
、@Delete
或@Update
注解的 DAO 方法现在支持ListenableFuture
作为返回值类型。b/119418331
bug 修复
- 修复了 Room 错误地尝试在
@Entity
的ignoredColumns
属性中查找包含列的构造函数的 bug。b/119830714 - 修复了 Room 在其生成的实现中不将 DAO 方法参数标记为最终参数的 bug。b/118015483
- 修复了在报告包含特殊符号的查询出现错误时 Room 的处理器会崩溃的 bug。b/119520136
- 修复了 Room 拒绝其他各种
Collection
实现作为IN
表达式的参数的 bug。b/119884035 - 修复了当永久观察导致 Room 不再发出新数据时,从 Room 返回的 LiveData 会进行垃圾回收的 bug。b/74477406
- 更新了
RoomDatabase
的闭锁以减少锁争用。b/117900450
2018 年 11 月 8 日
WorkManager
发布了 WorkManager 1.0.0-alpha11
。此版本包含多项更改,它们将使 API 在 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()
之前会返回数组。现在,这些方法会返回集合。这是一项重大变更。- 将
ListenableWorker.onStartWork()
重命名为ListenableWorker.startWork()
。这是一项重大变更。 WorkStatus
的构造函数不再是公共 API 的一部分。这是一项重大变更。Configuration.getMaxJobSchedulerID()
和Configuration.getMinJobSchedulerID()
已分别重命名为Configuration.getMinJobSchedulerId()
和Configuration.getMaxJobSchedulerId()
。这是一项重大变更。- 向公共 API 添加了大量的
@NonNull
注释,以改进 API 的人机工程学设计。 - 添加了
WorkManager.enqueueUniqueWork()
API 以将唯一的OneTimeWorkRequest
加入队列,而不必创建WorkContinuation
。 - 针对
WorkManager
的enqueue
和cancel
方法的所有变体现在都会返回一个新的Operation
类型。这是一项重大变更。 enqueue
的所有变体都不再接受WorkRequest
的 varargs。这是一项重大变更。请改用集合。您可以使用Arrays.asList()
修改现有代码。我们这样做是为了缩减 API 表面和方法计数。- 在一个进程中尝试多次
initialize
WorkManager
现在会导致出现IllegalStateException
。这是一项重大变更。
bug 修复
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
的enqueue
和cancel
方法的所有变体现在都会返回一个新的Operation
类型。 enqueue
的所有变体都不再接受WorkRequest
的 varargs。- 在一个进程中尝试多次
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
bug 修复
- 修复了在从 Rx 返回类型进行订阅和处理时 Room 会在主线程中执行磁盘 I/O 的 bug。b/117201279
- 修复了 Room 无法为 Kotlin 实体类中的字段找到合适的类型转换器的 bug。b/111404868
- 修复了 Room 为包含没有参数的 Kotlin 默认方法的
DAO
接口实现生成不正确代码的 bug。b/117527454 - 更新了 Room 的 SQLite 语法解析器,修复了会导致编译时间较长的性能问题。b/117401230
2018 年 10 月 29 日
Navigation
发布了 Navigation 1.0.0-alpha07
,该版本修复了一些问题,并进行了几项 API 更改。
新功能
- 通过新的 AppBarConfiguration 类,您可以自定义将哪些目标视为顶级目标。如需了解详情,请参阅更新的文档。b/117333663
- 您现在可以将参数传递给图表的起始目标 b/110300470
- 深层链接现在支持带有句点、连字符和加号的自定义架构。b/112806402
重大变更
- 将
navigation-testing-ktx
模块放入了navigation-testing artifact
,该模块将不再发布。 navigation-testing
制品现在依赖于 Kotlin 标准库。API 已被更改以与 Kotlin 惯例更加一致,但您可以继续将其用于采用 Java 语言编写的测试。- 不再支持元数据清单注册的导航图表。b/118355937
- 操作不能再附加到 <activity> 目标。aosp/785539
bug 修复
- 深层链接现在可以正确解析查询参数。b/110057514
- Activity 目标现在可以正确应用所有进场动画和退出动画。b/117145284
- 修复了使用自定义导航器时在配置更改后发生崩溃的问题。b/110763345
Safe Args
- Safe args 现在固定依赖于 Android Gradle 插件 3.2.1。b/113167627
- 现在可以为内部类生成方向。b/117407555
- 修复了与生成 <include> 图表的方向有关的问题。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()
变体,这些变体在比较差异后接受额外的回调,该回调在显示 pagedlist 时触发。这样,您可以将 PagedList 交换与其他界面更新同步。b/73781068 - 添加了
PagedList.getLoadedCount()
,以告知您内存中有多少项。请注意,如果停用了占位符,则返回值会一律等于.size()
。
bug 修复
- 修复了在重复使用列表的情况下比较差异时的竞态条件问题 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
。ListenableFuture
的参考实现在alpha02
的Futures
软件包中提供(请参阅下面的WorkManager
部分)。 Worker
扩展了ListenableWorker
,它使用抽象的Result doWork()
方法,仍然像以前那样运行。- 将一些方法和成员从
Worker
转移到了ListenableWorker
。 - 我们应该很快就会提供
ListenableWorker
的参考实现,这些实现使用 Kotlin 协程(发布稳定版本后)和 RxJava2。
- 通过
- 将接口
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 更改。
- 您现在可以使用
bug 修复
- 修复了 alpha09 中关于重复的
androidx-annotations.pro
文件的已知问题。您可以通过从 Gradle 文件中删除exclude 'META-INF/proguard/androidx-annotations.pro'
来移除之前的版本说明中的解决方法。 - 添加了 ProGuard 配置以保留新的
Worker
构造函数。b/116296569 - 修复了在对工作进行
REPLACE
处理后的竞争条件下潜在的NullPointerException
问题。b/116253486 和 b/116677275 WorkContinuation.combine()
现在接受一个或更多WorkContinuation
,而不是两个或更多。b/117266752
重要 API 更改
- 移除了所有之前的
deprecated
方法和类,尤其是默认的Worker
构造函数。 - 将接口
WorkerFactory
和具体实现DefaultWorkerFactory
合并到了一个名为WorkerFactory
的抽象类中。 - 移除了
WorkManager.synchronous()
和WorkContinuation.synchronous()
。 WorkManager.getStatus*()
方法现在返回ListenableFuture
。WorkManager.getStatus*LiveData()
返回LiveData
。
Futures
发布了 Futures 1.0.0-alpha02
。
API 变更
- 开发者现在可以将
ResolvableFuture
和AbstractResolvableFuture
用作ListenableFuture
的轻量级具体实现。
2018 年 10 月 8 日
Room
发布了 Room 2.1.0-alpha01
。
新功能
- FTS:Room 现在使用 FTS3 或 FTS4 映射表来支持实体。带有
@Entity
注解的类现在可以另外带有@Fts3
或@Fts4
注解,以使用全文搜索映射表来声明类。用于进一步自定义的 FTS 选项可通过注解的方法获得。b/62356416 - 视图:Room 现在支持使用 @DatabaseView 注解将类声明为存储的查询(也称为视图)。b/67033276
- 自动值:Room 现在支持将 AutoValue 注解类声明为实体和 POJO。Room 注释
@PrimaryKey
、@ColumnInfo
、@Embedded
和@Relation
现在可以在自动值注释类的抽象方法中声明。请注意,这些注解还必须附带@CopyAnnotations
,这样 Room 才能正确解读它们。b/62408420 - 额外的 Rx 返回值类型支持:带有
@Insert
、@Delete
或@Update
注解的 DAO 方法现在支持 Rx 返回值类型Completable
、Single<T>
和Maybe<T>
。b/63317956 - 带有
@Relation
注解的不可变类型:Room 以前要求带有@Relation
注解的字段可设置,但现在它们可以是构造函数参数。 enableMultiInstanceInvalidation
:是RoomDatabase.Builder
中的一个新 API,可使用同一数据库文件在 RoomDatabase 的多个实例中启用失效。这种多实例失效机制也适用于多个进程。b/62334005fallbackToDestructiveMigrationOnDowngrade
:是RoomDatabase.Builder
中的一个新 API,可在发生降级时自动重新创建数据库。b/110416954ignoredColumns
:是@Entity
注解中的一个新 API,可用于按名称列出忽略的字段。对于忽略实体上继承的字段很有用。b/63522075
API/行为变更
- 现通过
@Deprecated
废弃了RoomDatabase
中的mCallback
和mDatabase
,它们将在 Room 的下一主要版本中移除。b/76109329
bug 修复
- 修复了 Room 无法从损坏的数据库正确恢复或在初始化期间出现错误迁移的两个问题。b/111504749 和 b/111519144
- 现在,Room 将在数据类中正确使用 Kotlin 的主要构造函数,这样就无需将字段声明为
vars
。b/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
,与 2.0.0-rc01
相比,该版本修复了 ViewModel 中的一个问题。
Lifecycle
问题修复
- 修复了错误地移除了构造函数的 ViewModel ProGuard 规则 b/112230489
2018 年 9 月 20 日
Navigation
发布了 Navigation 1.0.0-alpha06
,该版本修复了一些问题,并进行了几项 API 更改。
新功能
- 现在支持 Fragment 和 Activity 目标的共享元素转换 b/79665225。如需了解详情,请参阅使用导航架构组件实现导航。
- 如果在
NavigationView
中选择某项内容,现在将关闭任何包含的底部工作表 b/112158843
API 变更
- 重大变更:导航器
navigate()
方法现在接受Navigator.Extras
参数。 - NavController 的
getGraph()
方法现在为NonNull
b/112243286
bug 修复
- 与来自各个目标的视图一起使用时,
NavigationUI.setupWithNavController()
不再泄露视图 b/111961977 - 现在仅调用一次导航器
onSaveState()
b/112627079
Safe Args
- 导航目标 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") } }
bug 修复
- 添加了“100 个作业”错误所需的另一个修复程序。b/115560696
- 针对由于竞争条件而导致的外键约束错误添加了一些修复程序。b/114705286
- 将
ConstraintTrackingWorker.onStopped(boolean)
调用委托给了底层Worker
。b/114125093 - 针对 Firebase JobDispatcher 强制采用正确的最小退避延迟。b/113304626
- 改进了库的内部线程保证。
- 更正了与
LiveData
内部重复数据删除有关的潜在问题。
API 变更
- 您现在可以通过将
WorkerFactory
指定为WorkManager.Configuration
的一部分,在运行时创建自己的Worker
实例。后备出厂设置为DefaultWorkerFactory
,它与之前版本的 WorkManager 的行为相符。Worker
和NonBlockingWorker
的默认构造函数现在标记为已弃用。请使用新的构造函数 (Worker(Context, WorkerParameters)
) 并调用super(Context, WorkerParameters)
,我们将在未来版本的 WorkManager 中移除默认构造函数。
- 我们在内部已开始使用新的
ListenableFuture
工件(没有 Guava 依赖项)。我们将在即将发布的版本中向 API 引入 ListenableFutures。此更改将支持最终取消隐藏NonBlockingWorker
。 - 添加了通过
TestDriver.setInitialDelayMet(UUID)
和TestDriver.setPeriodDelayMet(UUID)
在TestDriver
中触发定时工作的功能。b/113360060
重大变更
- 废弃了默认的
Worker
和NonBlockingWorker
构造函数。请尽快迁移到新的构造函数。我们将在未来版本中移除默认构造函数。
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
中的ConcurrentModificationException
。b/112272753 - 将
Data.getBooleanArray(String)
和Data.getIntArray(String)
的返回值类型注解更改为@Nullable
而不是@NonNull
。b/112275229
API 变更
Worker
现在扩展了一个新类NonBlockingWorker
。这不会影响任何当前的用法。将来,NonBlockingWorker
将成为自定义线程解决方案完全支持的实体。- 将
Data.getBooleanArray(String)
和Data.getIntArray(String)
的返回值类型注解更改为@Nullable
而不是@NonNull
。b/112275229 - Kotlin 扩展程序:弃用了
Map.toWorkData()
而添加了顶级workDataOf(vararg Pair<String, Any?>)
,以便与现有 API 更加一致。
2018 年 8 月 10 日
Navigation
发布了 Navigation 1.0.0-alpha05
,该版本修复了一些问题。
问题修复
- 修复了导致返回堆栈行为不正确的 bug。b/111907708
- 修复了生成的 Args 类的
equals()
中的 bug。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
,该版本修复了一些问题。
问题修复
- 防止在安排工作时锁定数据库。b/111801342
- 修复了导致
PeriodicWork
在低电耗模式下无法按计划运行的错误。b/111469837 - 修复了跟踪约束时导致
WorkManager
崩溃的竞争条件问题。googlecodelabs/android-workmanager/issues/56 - 在使用
WorkRequest.Builder#build()
时创建唯一的WorkRequest
。b/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 更改。
bug 修复
- 在已知的自动备份情况下,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
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 - 向 NavDirections 和 Args 生成的类添加了额外的
NonNull
注释 b/111455455 b/111455456
bug 修复
- 修复了深层链接到 Fragment 目标后系统返回按钮的问题 b/111515685
2018 年 7 月 12 日
Navigation
Navigation 1.0.0-alpha03
和关联的 Safe Args Gradle 插件包含多项 API 变更、行为变更和问题修复。
API/行为变更
- 为工具栏添加了 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
- 例如,
- 重大变更:默认情况下,现在将参数视为非 null。要允许字符串和 Parcelable 参数具有 null 值,请添加
app:nullable="true"
b/79642307 - 您现在可以采用“123L”的形式对默认值使用
app:type="long"
b/79563966 - 现在支持 Parcelable 参数,并使用
app:type
的完全限定类名。支持的唯一一个默认值是"@null"
b/79563966 - Args 类现在可实现
equals()
和hashCode()
b/79642246 - Safe Args 插件现在可以应用于库项目 b/80036553
- Safe Args 插件现在可以应用于功能项目 b/110011752
bug 修复
- 修复了在 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 日
AndroidX 版本的 Lifecycle、Room 和 Paging 发布了版本 2.0.0-beta01
。
Lifecycle
问题修复
- 修复了 LifecycleObserver ProGuard 规则以仅保留实现而不保留子接口 b/71389427
- 修复了 ViewModel ProGuard 规则以允许混淆和压缩
Room
API/行为变更
- 添加了
RoomDatabase.Builder.setQueryExecutor()
以允许自定义查询运行位置 - 添加了 RxJava2
Observable
支持 - 生成的 DAO 和数据库实现现在是最终实现
bug 修复
- 在“找不到字段的 getter”错误中指定类/字段名称 b/73334503
- 修复了 RoomOpenHelper 与较低版本的 Room 的向后兼容性问题 b/110197391
Paging
问题修复
- 修复了在某些前置情况下(占位符已停用,PositionalDataSource)内容消失的问题 b/80149146
- (在
1.0.1
中已发布)修复了导致PagedListAdapter
和AsyncPagedListDiffer
无法发出移动事件信号的崩溃问题。b/110711937
2018 年 6 月 26 日
Paging
发布了 Paging 1.0.1
,该版本修复了 runtime
中的一个问题。为了保持稳定性,我们强烈建议使用 1.0.1
。还发布了 Paging RxJava2 1.0.1
,它与 1.0.0-rc1
完全相同。
bug 修复
- 修复了导致
PagedListAdapter
和AsyncPagedListDiffer
无法发出移动事件信号的崩溃问题。b/110711937
WorkManager
发布了 WorkManager 1.0.0-alpha04
。
问题修复
当使用基于
AlarmManager
的实现时,现在可以正确地重新调度PeriodicWorkRequest
。修复了在强行停止或重新启动后重新调度所有 Worker 时出现的潜在 ANR 问题。b/110507716
向各种 WorkManager API 添加了可为 null 性注解。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()
将返回true
。显式取消工作进程后,Worker.isCancelled()
将返回true
。b/79632247在 API 28 上添加了对 JobParameters#getNetwork() 的支持。这通过
Worker.getNetwork()
公开。添加了
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
,这样便可强制规定可以将多少作业发送到JobScheduler
或AlarmManager
。这有助于防止WorkManager
占用所有可用的JobScheduler
插槽。添加了
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
,它有助于定义WorkManager
尽可放心使用的一系列JobScheduler
作业 ID。b/79996760Worker.getRunAttemptCount()
返回给定Worker
的当前运行计数。b/79716516通过
WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
,可以将唯一的PeriodicWorkRequest
加入队列。b/79600647WorkManager.cancelAllWork()
会取消所有Worker
。依赖于WorkManager
的库可以使用WorkManager.getLastCancelAllTimeMillis()
查询上次调用此方法的时间,以便对内部状态进行额外的清理。添加了
WorkManager.pruneWork()
以从内部数据库中移除完成的作业。b/79950952 和 b/109710758
行为变更
- 为所有
WorkRequest
添加了一个隐式标记,它是Worker
的完全限定类名。这样便能够在没有tag
的情况下或在id
不可用时移除WorkRequest
。b/109572351
重大变更
已将
Worker.WorkerResult
重命名为Worker.Result
。Worker.onStopped
现在有一个额外的isCancelled
参数,显式取消Worker
后,该参数将设置为true
。
2018 年 6 月 7 日
发布了 Navigation 1.0.0-alpha02
。
Navigation
行为变更
FragmentNavigator
现在使用setReorderingAllowed(true)
。b/109826220Navigation 现在对从深层链接网址解析的参数执行 URLDecode 操作。b/79982454
bug 修复
修复了在从 Fragment 生命周期方法调用 Navigation 时出现的
IllegalStateException
。b/79632233Navigation 现在依赖于支持库 27.1.1 来修复使用动画时的闪烁问题。b/80160903
修复了在使用 defaultNavHost="true" 作为子 fragment 时出现的
IllegalArgumentException
。b/79656847修复了在使用 NavDeepLinkBuilder 时出现的
StackOverflowError
。b/109653065修复了在导航回嵌套图表时出现的
IllegalArgumentException
。b/80453447修复了在使用
launchSingleTop
时 Fragment 重叠的问题。b/79407969Navigation 现在可以为嵌套图表构建正确的合成返回堆栈。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()
时出现的NullPointerException
。b/79550068修复了导致在
Application.onCreate()
时重新调度Worker
的问题。b/79660657修复了您可以调度的作业数超过操作系统允许的作业数的问题。b/79497378
将与
Worker
关联的唤醒锁定的清理工作移到了后台线程。当所有待处理的作业完成时,
AlarmManager
实现现在可以正确清理。修复了会影响非英语语言区域的清理 SQL 查询。b/80065360
在
Data
中添加了对float
的支持。b/79443878Data.Builder.putAll()
现在会返回Builder
的实例。b/79699162文档中介绍了更多 javadoc 和修复程序。b/79691663
API 变更
Worker
可以对停止做出响应。Worker.isStopped()
可用于检查Worker
是否已停止。Worker.onStopped()
可用于执行轻量级清理操作。Worker.getTags()
API 将返回与Worker
关联的标记Set
。为 API 添加了
javax.time.Duration
过载,它接受时长和TimeUnit
的组合。受@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.0
和 Room 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
版本下发布的,可与其他 API 结合使用。
AndroidX 库。
Kotlin 扩展程序
ViewModel、ReactiveStreams 和 Sqlite(以前是 Room 的“数据库”组件)全部都添加了 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 将在测试阶段进行短时间的测试。
我们不计划对 Paging 1.0
做出进一步的 API 更改,并且任何 API 变更的标准都非常高。
Alpha RxJava2 对 Paging 的支持作为一个单独的可选模块 (android.arch.paging:rxjava2:1.0.0-alpha1
) 发布,并且将暂时单独版本化,直到它稳定为止。
此新库提供了 RxJava2 来替代 LivePagedListBuilder
,能够构造 Observable
和 Flowable
,接受 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 变更,以阐明执行器在构建器中的作用:
(在
PagedList.Builder
和LivePagedListBuilder
中)将setBackgroundThreadExecutor()
重命名为setFetchExecutor()
(在
PagedList.Builder
中)将setMainThreadExecutor()
重命名为setNotifyExecutor()
。
修复了
PagedList.mCallbacks
成员,使其成为私有成员。
bug 修复
LivePagedListBuilder
将在指定的执行器上(而不是在架构组件 IO 线程池中)触发初始PagedList
加载。修复了内部
DataSource
封装容器(用于实现DataSource.map
以及停用了占位符的PositionalDataSource
加载)中的失效行为 b/77237534
Room
问题修复
修复了 Room 的 Rx
Single
和Maybe
实现中的一个关键错误,该错误将提前回收查询,导致在向返回的Single
或Maybe
实例添加多个观察器时出现问题。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 变更
- 根据 API 审核反馈,
@RawQuery
不再接受将String
作为查询参数传递。您需要使用 SupportSQLiteQuery。(要轻松创建具有参数支持的 SupportSQLiteQuery 实例,请参阅 SimpleSQLiteQuery。) - RoomDatabase.Builder 的 fallbackToDestructiveMigrationFrom 方法现在接受
vararg int
,而不是vararg Integer
。
问题修复
RoomDatabase.clearAllTables 现在通过设置 WAL 检查点和对数据库执行
VACUUM
操作,尝试将空间返还给操作系统。@RawQuery
现在接受observedEntities
属性的任何 Pojo,前提是该 Pojo 通过其Embedded
字段或Relation
引用一个或多个实体。b/74041772Paging:Room 的 DataSource 实现现在可以正确处理多表依赖项(如关系和连接)。以前,这些将无法触发新结果,或者可能无法编译。b/74128314
生命周期
只有一项小的变更:将 android.arch.core.util.Function
从 arch:runtime
移到了 arch:common
。这样,便可以在没有运行时依赖项的情况下使用它,例如在下面的 paging:common
中。
lifecycle:common
是 lifecycle:runtime
的依赖项,所以此变更不会直接影响 lifecycle:runtime
,而只会影响像 Paging 一样直接依赖于 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 进入测试阶段之前,计划将 Paging alpha7
作为最终版本。
API 变更
DataSource.LoadParams
对象现在具有一个公开构造函数,而DataSource.LoadCallback
对象现在是抽象对象。 这样,便可以封装DataSource
或通过模拟回调直接测试DataSource
。b/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
从接口更改为抽象类以启用映射功能。
bug 修复
- 构建器已更改为最终版本。 b/70848565
- 现修复了 Room
DataSource
实现,使其能够处理多表查询 - 此修复包含在 Room 1.1.0-beta1 中,参见上文。 - 修复了在启用占位符后且总大小为页面大小的整数倍时无法为
PositionalDataSource
调用BoundaryCallback.onItemAtEndLoaded
的错误。
2018 年 3 月 2 日
发布了 Room 1.1.0-alpha3
。这是计划的最后一个 Room 1.1.0
版本。
API 变更
InvalidationTracker 的
addObserver
和removeObserver
方法现已同步,并且需要在非界面线程上调用。这样可防止在观察表格时出现一些竞态条件。RoomDatabase 类有了一个新的
clearAllTables()
方法,该方法可截断所有表格内容。b/63807999SupportSQLiteQuery
现在有一种getArgCount()
方法,该方法可返回查询参数的数量。b/67038952
问题修复
Paging 查询现在正确支持
@RawQuery
。b/72600425当两个或更多
Dao
接口是同一软件包中的内部类且具有相同的名称时,Room 现在可以正确命名生成的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-alpha6
和com.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/67757002Guava 支持: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 8
和Kotlin
。 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 日
发布了 Lifecycle 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 变更
- 已废弃的
LifecycleActivity
和LifecycleFragment
现已移除 - 请使用FragmentActivity
、AppCompatActivity
或支持Fragment
。 - 向
ViewModelProviders
和ViewModelStores
添加了@NonNull
注释 - 废弃了
ViewModelProviders
构造函数 - 请直接使用其静态方法 - 废弃了
ViewModelProviders.DefaultFactory
- 请使用ViewModelProvider.AndroidViewModelFactory
- 添加了静态
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
方法,用于检索适合创建ViewModel
和AndroidViewModel
实例的静态Factory
。
Room 1.1.0-alpha1
新功能
RawQuery
:这一新 API 允许@Dao
方法接收 SQL 作为查询参数 b/62103290 和 b/71458963fallBackToDestructiveMigrationsFrom
:通过RoomDatabase.Builder
中的这一新 API,可以更精细地控制允许从哪些起始架构版本进行破坏性迁移(与 fallbackToDestructiveMigration 相比)b/64989640- Room 现在仅支持较新的 Paging API (alpha-4+),不再支持已废弃的
LivePagedListProvider
。如需使用新的 Room Alpha 版,您需要使用 Pagingalpha-4
或更高版本,并从LivePagedListProvider
切换到LivePagedListBuilder
(如果尚未切换)。
bug 修复
- 改进了对 Kotlin Kapt 类型的支持。b/69164099
- 字段的顺序不再使架构无效。b/64290754
Paging 1.0.0-alpha5
问题修复
- 修复了停用占位符后的页面加载问题 b/70573345
- 添加了跟踪 IllegalArgumentException bug 的日志记录 b/70360195(以及推测性 Room 端修复)
- 修复了 Javadoc 示例代码 b/70411933 和 b/71467637
2017 年 12 月 11 日
发布了 Paging alpha4-1
。这是 Paging alpha 4 的一个小错误修复版本。
问题修复
- 不对回调参数进行无效数据源检查。b/70353706 和 b/70360195
2017 年 12 月 7 日
发布了 Paging alpha4
,该版本主要针对网络和网络 + 数据库用例进行了重要更改并添加了一些内容。
API 变更
DataSource
现在是一个异步 API,使直接从网络进行分页更容易:- 初始大小和数据的单一入口点
- 通过暂挂回调并稍后分派来支持网络重试
- 线程安全回调允许异步加载,以便在界面线程上创建单一网络支持的
PagedList
- 与初始加载参数有关的错误行为更清晰
TiledDataSource
重命名为PositionalDataSource
以反映其基于位置的索引,以及在停用占位符后不会平铺的事实。添加了
PageKeyedDataSource
以支持嵌入网络页面加载的下一个/上一个令牌。KeyedDataSource
重命名为ItemKeyedDataSource
以区分清楚。用
LivePagedListBuilder
和DataSource.Factory
替换了LivePagedListProvider
。LivePagedListBuilder 可提供相同的功能,但具有更多自定义项和更简单的默认值。DataSource.Factory 允许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
。除了对 reactivestreams
库进行了一项更改之外,此版本与 rc1
完全相同。
问题修复
LiveDataReactiveStreams
现在可以正确实现 Reactive Streams 规范。b/67999342
候选版本 - 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/624732121 Query
方法现在可以带有@Transaction
注解。 如需了解详情,请参阅@Transaction
的参考文档。b/65112315- 从公共 API 中移除了 Room 中的
StringUtil
类(从未打算将其用作公共 API)。
- Room 现在依赖于最新的 xerial 工件,该工件修复了编译期间的
Lifecycles:
当小于 24 的 API 部分涵盖 Activity 时,
LiveData
可以正常工作。b/65665621现在可以正确调用父类中的
OnLifecycleEvent
方法;或者,如果无法调用,则会在编译期间输出警告。b/63474615Lifecycle 现在将
WeakReference
恢复到 LifecycleOwner 避免泄露 LifecycleOwner(如果 Lifecycle 在内存中保留的时间较长) (这只是一种预防措施,您仍应小心避免 泄露Lifecycle
)。
2017 年 10 月 9 日
发布了 Paging alpha-3
,此次发布使其与 Lifecycles 和 Room 的 beta 2
版本兼容。
问题修复
- 改进了 Paging 文档。
2017 年 10 月 5 日
所有主要工件(Paging 除外)现在都是 beta 2
。
此次没有发布新版本的 Paging。
问题修复
Lifecycles:
- 当
LiveData
未处于活跃状态时,LiveDataReactiveStreams
现在可以正确地从源发布者取消订阅。b/62609183 - 当父类来自另一个模块时,Lifecycle 事件会正确地传播到父类。b/63474615
- 当观察者在订阅创建期间取消订阅时,LiveData 会正确处理观察者。b/66337741
现在,依赖项树中提供了 Java 8 语言工件的
FullLifecycleObserver
。b/66557878对于 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
- 如果单列主键为
Integer
或Long
,则它们可以为Nullable
。b/67086876 - 失效跟踪器会在测试模式下正确处理重新输入。b/6547911
- Room 现在会在编译时检查列和表格名称中是否存在无效字符(无效字符:
`
和"
)。b/64749111
- 当
2017 年 9 月 21 日
在此版本中,所有架构组件模块都至少达到 beta 1
(新的 Paging Library 除外,它是 alpha 2
)。
我们不计划再进行任何 API 更改。可能会发生计划外更改,但在 1.0.0
稳定之前更改任何 API 的标准都非常高且不太可能发生。
- 在
1.0.0
稳定之前,将移除 LifecycleActivity 和 LifecycleFragment。使用 Support Library26.1.0
或更高版本时,不需要这些组件。
与 alpha 阶段不同,测试版阶段所计划的持续时间非常短。
版本变更
- Lifecycle Extensions 和 Room 现在是
beta 1
- Paging 现在是
alpha 2
- Lifecycles(runtime 和 common)与 Arch Core (common) 没有变化。自 9 月 13 日以来,这两个工件都是
1.0.0
版本。
新的工件
Lifecycle 现在有一个名为
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 数据库:
- 数据库配置中出现了 API 更改。b/65349673 b/65499876
Paging:
- 通过添加示例和线程注解改进了 Paging 文档。
问题修复
- Room:
@Query
方法中的 Kotlin 多行字符串得到正确处理。b/6588094
- Paging:
- Paging 工件不再依赖于 junit。b/65690261
1.0.0 Alpha 9-1 - 2017 年 9 月 13 日
这是一个主要版本,其中 core lifecycle 工件(runtime 和 common)与 arch core (common) 已达到稳定版本 1.0.0
。
随着此更改,Support Library 26.1.0 现在依赖于这些库。 AppCompatActivity 和 Support Fragment 现在都实现 LifecycleOwner 接口。
此版本还依赖于 Support Library 26.1.0
以利用新的集成。
新库:Paging
此版本还包括一个名为 Paging 的新库,使用该库可在必要时以区块的形式轻松地将大型数据集加载到 RecyclerView。发布的 Paging 版本为 alpha1
,它将具有自己的发布周期。
API 变更
- 以下类已弃用并且将在未来的版本中移除:
bug 修复
如果应用在类路径中具有该注解,则生成的类现在带有
@Generated
注解。 b/35754819修复了 MediatorLiveData 的观察者比较错误。b/64434127
[LiveData] 现在支持 SQLite
WITH
查询。[ref-LiveData] b/62510164修复了在观察到超过一个表格时 InvalidationTracker 无法发送正确列表的错误。b/65099281
修复了 Room 在 Windows 系统上生成不同文件的错误。b/64470691
现在支持根目录软件包中的 LifecycleObserver。b/62310817
1.0.0 Alpha 9 - 2017 年 8 月 16 日
问题修复
- 修复了 LiveData 中的一个问题:在将第一个观察者从其
onChanged
方法中移除后会忽略第二个观察者。b/64285805
1.0.0 Alpha 8 - 2017 年 8 月 1 日
行为变更
- 为基元类型的列或带有 NonNull 注解的列添加了
NOT NULL
约束。这样会更改表格的结构,因此,如果您已在使用架构组件 alpha 7 或更低版本,那么要保留数据,则需要实现迁移,或者使用构建器中的fallbackToDestructiveMigration()
方法。b/62007004
API 变更
1.0.0 Alpha 7 - 2017 年 7 月 26 日
问题修复
修复了 LifecycleRegistry
removeObserver
方法中会打断 LifecycleObserver 重新添加操作的重大问题。修复了自定义数据库的 InvalidationTracker b/63162311
1.0.0 Alpha 6 - 2017 年 7 月 25 日
行为变更
LifecycleObserver 调用的顺序已更改。以前,总是按照观察者的添加顺序调用观察者:如果
observer1
在observer2
之前添加,则它将在observer2
之前接收ON_CREATE
以及其他所有事件。销毁事件不再是这种情况,对于此类事件,调用观察者的顺序与添加的顺序相反。 所以,当前的行为是:如果observer1
在observer2
之前添加,则ON_CREATE
会先发送到observer1
,再发送到observer2
(对于ON_START
和ON_RESUME
同样如此),但ON_PAUSE
事件会先发送到observer2
,然后才会发送到observer1
(对于ON_STOP
和ON_DESTROY
同样如此)。如果缺少迁移,则 Room 会抛出异常。以前,Room 只会清除数据库,但现在它会发生崩溃。 开发者可以通过调用构建器 API 来选择清除行为。b/63872392
API 变更
向
RoomDatabase.Builder
添加了fallbackToDestructiveMigration()
方法,用于在缺少迁移时清除数据库。b/63872392架构组件现在依赖于 Support Library 26.0.0
问题修复
修复了处理嵌套到 @Embedded 中的 @Relation 的问题。b/63736065
修复了具有自动增量式主键的表格的迁移测试问题。b/63393618
现在,运行 DELETE 或 UPDATE 查询的 @Queries 可以正确接收参数。b/63872538
现在,当所有者 Fragment 在返回栈中并且发生两次配置更改时,会保留 ViewModel。b/38445801
1.0.0 Alpha 5 - 2017 年 7 月 18 日
API 变更
向
RoomDatabase.Builder
添加了一种新的回调方法,用于观察在何时创建或打开了数据库。b/62699324@Query 现在可以返回 RxJava
Maybe
或Single
。b/62231019
您需要依赖于 android.arch.persistence.room:rxjava2
工件来向 Room 添加 RxJava 支持。
问题修复
修复了没有任何参数的
@Delete
查询问题。b/63608092修复了 getter 和 setter 的 Room 类型检查。b/63733651
1.0.0 Alpha 4 - 2017 年 7 月 11 日
API 变更
向 RoomDatabase 添加了一种新的便捷方法 (
runInTransaction()
)。@Insert
、@Delete
和@Update
方法现在可以具有来自不同实体类型的参数。b/62682405
问题修复
修复了
@Dao
方法中的byte[]
处理问题。b/62460045Room 中的迁移检查现在使用不区分大小写的比较。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 文档。将
LifecycleActivity
和LifecycleFragment
类移入了android.arch.lifecycle:extensions
工件。MigrationTestHelper 接收插桩实例而不是
Context
,从而能够从测试资源中读取架构,并在应用上下文中创建数据库。Iterable
现在可以作为@DAO
方法中的@Insert
、@Delete
和@Update
注解的参数类型。b/62259820
问题修复
不再多次调用具有生命周期事件的替换方法。
现在可以正确处理多个
IN
参数。b/62608681抽象 DAO 类现在可以具有接收
@Database
实例的构造函数。b/38488747DAO
现在可以具有带类型参数的超类/接口。b/62103620
1.0.0 Alpha 2 - 2017 年 6 月 2 日
API 变更
InvalidationTracker 回调现在接收已更改的表格名称的列表。(b/38468740)
缩小了 SupportSQLiteDatabase 类的 API Surface。(b/38481640)
问题修复
- 为生命周期提供了 ProGuard 文件。(b/62113696)
- 修复了类型转换器丢失数据的问题。(b/62100716)
- 允许从
@Insert
查询返回Long[]
。
1.0.0 Alpha 1 - 2017 年 5 月 17 日
MinSDK:14
一般建议
虽然我们在发布之前进行了大量测试,但架构组件目前还是 alpha 版。如果您正在构建正式版应用,请注意,API 将在 1.0 版本之前发生更改,并且可能不完全稳健。如果您不愿调试所使用的库中的问题,我们建议您先在副项目中尝试使用架构组件。
我们不建议所有人立即迁移。我们将为 1.0 版本的架构组件准备好迁移指南。
已知限制和问题
- 支持库中的 Lifecycle
Fragment
和ActivityCompat
尚未实现LifecycleOwner
接口。当架构组件达到 1.0.0 版本时,它们将实现该接口。