2019 年 1 月 15 日
WorkManager
WorkManager 1.0.0-beta02
已发布。此版本包含一些错误修复。
错误修复
- 修复了在 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 稳定,直到下一个版本,除非出现严重问题。此版本包含一些错误修复。
错误修复
- 已成功完成的父工作的先前已取消的子工作将不再运行。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/118670572OnDestinationChangedListener
现在也传递参数的Bundle
aosp/837142app:clearTask
和app:launchDocument
属性及其相关方法已被移除。使用app:popUpTo
和您的图的根目录来从返回堆栈中移除所有目的地。b/119628354ActivityNavigator.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/830663Navigator
进行了重大重构,移除了对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
而不是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
中其余的变长参数方法,以简化 API。要修复任何构建问题,您可以将现有变长参数封装在Arrays.asList(...)
中。我们仍然包含每个方法的单参数版本。这是一项破坏性更改。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们呈现了一个令人困惑的 API;现有的combine
方法更易于理解。这是一项破坏性更改。
错误修复
- Marshmallow 之前的实现现在在从已执行任务的进程死亡中恢复方面更可靠。
- 通过 WorkManager 跟踪通过
observeForever
观察的LiveData
。这是 Room 库修复的向后移植。b/74477406 Data.Builder.build()
现在在序列化对象超过其最大大小时抛出异常。这以前只会在您无法正确处理的后台线程上发生。- 进一步区分已停止与已取消的工作;
getWorkInfoById()
将在ListenableWorker.onStopped()
期间返回状态为CANCELLED
的WorkInfo
。 - 在
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
而不是Payload
。Worker
没有用于输出Data
的 getter 和 setter 方法。 - 添加了
Operation.await()
和ListenableFuture.await()
Kotlin 扩展方法。 - 将
Operation.getException()
重命名为Operation.getThrowable()
。 ContentUriTriggers
类及其引用的方法不再可供公共使用。- 移除了
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中其余的变长参数方法,以简化 API。要修复任何构建问题,您可以将现有变长参数封装在Arrays.asList(...)
中。我们仍然包含每个方法的单参数版本。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们呈现了一个令人困惑的 API;现有的combine
方法更易于理解。
2018 年 12 月 4 日
Room
Room 2.1.0-alpha03
已发布,支持协程并修复了多个错误。
API 更改
@Fts3
/@Fts4
中的 FTStokenizer
现在接受 String 而不是 Enum。这允许 Room 使用自定义分词器。内置分词器仍然在FtsOptions
中定义为字符串常量。b/119234881
新功能
- 协程:DAO 方法现在可以是挂起函数。为了支持 Room 中的挂起函数,发布了一个新的工件
room-coroutines
。b/69474692 - 使用
@Insert
、@Delete
或@Update
注解的 DAO 方法现在支持ListenableFuture
作为返回类型。b/119418331
错误修复
- 修复了 Room 错误地尝试在
@Entity
的ignoredColumns
属性中查找带有列的构造函数的错误。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
。 WorkManager
上enqueue
和cancel
方法的所有变体现在都返回一个新的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()
。WorkManager
上enqueue
和cancel
方法的所有变体现在都返回一个新的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。
新功能
- 一个新的 AppBarConfiguration 类允许您自定义哪些目的地被视为顶级目的地。有关详细信息,请参阅更新的文档。b/117333663
- 您现在可以将参数传递给图的起始目的地 b/110300470
- 深度链接现在支持带有句点、连字符和加号的自定义方案。b/112806402
破坏性更改
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
。参考实现ListenableFuture
s 在alpha02
的Futures
包中提供(参见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
时竞态条件下潜在的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
- Auto Value: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 / 行为更改
RoomDatabase
中的mCallback
和mDatabase
现在已被@Deprecated
标记,并将在 Room 的下一个主要版本中移除。b/76109329
错误修复
- 修复了 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
已发布,包含 ViewModel 中 2.0.0-rc01
的一个错误修复。
Lifecycle
错误修复
- 修复了 ViewModel proguard 规则错误地移除了构造函数的问题 b/112230489
2018 年 9 月 20 日
导航
Navigation 1.0.0-alpha06
已发布,修复了错误并更改了 API。
新功能
- Fragment 和 Activity 目的地的共享元素转换现在受支持 b/79665225。更多信息请参阅 使用 Navigation Architecture Component 实现导航
- 现在,选择
NavigationView
中的项将关闭任何包含的底部工作表 b/112158843
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)
调用委托给底层的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)。我们将在未来的版本中将 ListenableFutures 引入 API。此更改将支持最终公开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 1.0.0-alpha05
已发布,修复了错误。
错误修复
- 修复了导致不正确返回堆栈行为的错误。b/111907708
- 修复了生成 Args 类中
equals()
方法的错误。b/111450897 - 修复了 Safe Args 中的构建失败。b/109409713
- 修复了从资源标识符到 Java 名称的转换错误 b/111602491
- 修复了 Safe Args 插件中关于可空性的错误消息。
- 添加了缺失的可空性注解。
2018 年 8 月 6 日
Lifecycle、Room 和 Paging 的 AndroidX 版本发布 2.0.0-rc01
。所有工件与 2.0.0-beta01
相比没有变化。
2018 年 8 月 1 日
WorkManager
WorkManager 1.0.0-alpha06
已发布,修复了错误。
错误修复
- 调度工作时防止数据库锁定。b/111801342
- 修复了在低电耗模式下
PeriodicWork
未按计划运行的错误。b/111469837 - 修复了跟踪约束时的竞态条件,导致
WorkManager
崩溃。googlecodelabs/android-workmanager/issues/56 - 使用
WorkRequest.Builder#build()
时创建唯一的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 更改。
错误修复
- 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 保存状态后忽略导航操作,从而避免“无法在 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
中发布)修复了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
相同。
错误修复
- 修复了
PagedListAdapter
和AsyncPagedListDiffer
无法发出移动事件时导致的崩溃。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
修复了重新排队
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)
,这有助于定义JobScheduler
作业 ID 的范围,以便WorkManager
安全使用。b/79996760Worker.getRunAttemptCount()
返回给定Worker
的当前运行次数。b/79716516WorkManager.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
发布。
导航
行为变更
FragmentNavigator
现在使用setReorderingAllowed(true)
。b/109826220Navigation 现在会对从深层链接 URL 解析的参数进行 URL 解码。b/79982454
错误修复
修复了从 Fragment 生命周期方法调用导航时出现的
IllegalStateException
。b/79632233Navigation 现在依赖于 Support Library 27.1.1,以修复使用动画时的闪烁问题。b/80160903
修复了在子 fragment 中使用 defaultNavHost="true" 时出现的
IllegalArgumentException
。b/79656847修复了使用 NavDeepLinkBuilder 时出现的
StackOverflowError
。b/109653065修复了导航回嵌套图时出现的
IllegalArgumentException
。b/80453447修复了使用
launchSingleTop
时 Fragment 重叠的问题。b/79407969Navigation 现在为嵌套图构建正确的合成返回栈。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()
上的NullPointerException
。b/79550068修复了导致
Worker
在Application.onCreate()
上重新调度的问题。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
。添加了
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.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
版本发布,可与其他 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
,能够构建 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 变更以阐明执行器在构建器中的作用
将
setBackgroundThreadExecutor()
重命名为setFetchExecutor()
(在PagedList.Builder
和LivePagedListBuilder
中)将
setMainThreadExecutor()
重命名为setNotifyExecutor()
(在PagedList.Builder
中)。
将
PagedList.mCallbacks
成员修复为私有。
错误修复
LivePagedListBuilder
在指定的执行器上触发初始PagedList
加载,而不是在 Arch Components IO 线程池中。修复了内部
DataSource
包装器中的无效行为(用于实现DataSource.map
,以及禁用占位符的PositionalDataSource
加载)b/77237534
Room
错误修复
修复了 Room 的 Rx
Single
和Maybe
实现中的一个严重错误,该错误会导致它提前回收查询,如果您向返回的Single
或Maybe
实例添加多个观察者,则会引发问题。b/76031240RoomDatabase.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。(参见 SimpleSQLiteQuery 可轻松创建带有参数支持的 SupportSQLiteQuery 实例)。 - RoomDatabase.Builder 的 fallbackToDestructiveMigrationFrom 方法现在接受
vararg int
而不是vararg Integer
。
错误修复
RoomDatabase.clearAllTables 现在通过设置 WAL 检查点和
VACUUM
数据库来尝试将空间返回给操作系统。@RawQuery
现在接受任何 Pojo 作为observedEntities
属性,只要 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
,只会影响直接依赖于 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
或直接使用模拟回调测试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
已从接口更改为抽象类,以实现映射功能。
错误修复
- 将 Builders 更改为 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 更改
InvalidationTracker 的
addObserver
和removeObserver
方法现在是同步的,需要在一个非 UI 线程上调用。这可以防止在观察表时出现一些竞态条件。RoomDatabase 类中新增了
clearAllTables()
方法,用于截断所有表内容。b/63807999SupportSQLiteQuery
现在有一个getArgCount()
方法,它返回查询参数的数量。b/67038952
错误修复
@RawQuery
现在已正确支持分页查询。b/72600425Room 现在正确命名生成的
Dao
类,以避免当两个或更多Dao
接口在同一包中且名称相同时的名称冲突。b/73536380Pojo
中的泛型字段类型现在作为扩展类的成员正确解析。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-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/72366965Room 现在使用 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 更改
- 已弃用的
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
。
错误修复
- 改进了对 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 的一个小错误修复版本。
错误修复
- 不要检查回调参数是否为无效数据源。b/70353706, b/70360195
2017 年 12 月 7 日
Paging alpha4
发布,其中包含重大更改和新增功能,主要针对网络和网络+数据库用例。
API 更改
DataSource
现在是一个异步 API,使得直接从网络进行分页更容易- 初始大小和数据的单点入口
- 通过保留回调并稍后分派来支持网络重试
- 线程安全的回调允许异步加载,以便在 UI 线程上创建单个网络支持的
PagedList
。 - 初始加载参数周围的错误行为更清晰
TiledDataSource
已重命名为PositionalDataSource
,以反映其基于位置的索引,以及在禁用占位符时不平铺的事实。添加了
PageKeyedDataSource
以支持嵌入在网络页面加载中的下一个/上一个令牌。KeyedDataSource
重命名为ItemKeyedDataSource
以明确区别。LivePagedListBuilder
和DataSource.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
库中的一项更改。
错误修复
LiveDataReactiveStreams
现在正确实现了 Reactive Streams 规范。b/67999342
发布候选版 - 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)。
- Room 现在依赖于最新的 xerial 工件,它修复了编译期间的
生命周期
在 API < 24 的设备上,当 Activity 部分被覆盖时,
LiveData
正常工作。b/65665621父类中的
OnLifecycleEvent
方法现在已正确调用,如果不可能,则在编译期间打印警告。b/63474615Lifecycle 现在持有一个指向其 LifecycleOwner 的
WeakReference
,以避免在 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
,如果它是Integer
或Long
。b/67086876 - 失效追踪器在测试模式下正确处理重新进入。b/65471397
- Room 现在在编译时检查列和表名称中的无效字符(无效字符:
`
、"
)。b/64749111
- Room 现在在编译时打印错误,当
2017 年 9 月 21 日
在此版本中,所有 Architecture Components 模块都至少达到 beta 1
(新 Paging 库为 alpha 2
除外)。
我们不打算再进行任何 API 更改。可能会发生意外更改,但在 1.0.0
稳定版发布之前更改任何 API 的门槛非常高,不太可能发生。
- LifecycleActivity 和 LifecycleFragment 将在
1.0.0
稳定版发布之前移除。当使用 Support Library26.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 数据库
- 数据库配置中的 API 变更。b/65349673 b/65499876
Paging
- 改进了 Paging 文档,提供了更多示例和线程注解。
错误修复
- Room
- Kotlin
@Query
方法中的多行字符串处理正确。b/65809374
- Kotlin
- Paging
- Paging 工件不再依赖于 junit。b/65690261
1.0.0 Alpha 9-1 - 2017 年 9 月 13 日
这是一个主要版本,其中核心生命周期工件(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 更改
- 以下类已弃用,并将在未来版本中移除
错误修复
如果应用程序的类路径中包含注解,则生成的类现在会使用
@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 日
错误修复
- 修复了 LiveData 中的一个错误,当第一个 Observer 从其
onChanged
方法中移除时,第二个 Observer 被忽略。b/64285805
1.0.0 Alpha 8 - 2017 年 8 月 1 日
行为变更
- 为原始类型或带有 NonNull 注解的列添加了
NOT NULL
约束。这会更改表的结构,因此如果您已经在使用 Architecture Components alpha 7 或更早版本,则需要实现迁移才能保留数据,或在构建器中使用fallbackToDestructiveMigration()
方法。b/62007004
API 更改
1.0.0 Alpha 7 - 2017 年 7 月 26 日
错误修复
修复了 LifecycleRegistry
removeObserver
方法中的关键错误,该错误导致 LifecycleObserver 重新添加失败。修复了自定义数据库的 InvalidationTracker b/63162311
1.0.0 Alpha 6 - 2017 年 7 月 25 日
行为变更
LifecycleObserver 调用的顺序已更改。以前,观察者总是按其添加顺序调用:如果
observer1
在observer2
之前添加,它将先接收ON_CREATE
和所有其他事件,然后才轮到observer2
。对于销毁事件,情况不再如此,观察者将按添加顺序的逆序调用。因此,当前行为是:如果observer1
在observer2
之前添加,则ON_CREATE
将首先发送给observer1
,然后发送给observer2
(ON_START
和ON_RESUME
也会发生同样的情况),但ON_PAUSE
事件将首先发送给observer2
,然后才发送给observer1
(ON_STOP
和ON_DESTROY
也会发生同样的情况)。Room 在缺少迁移时会抛出异常。以前 Room 只会清除数据库,但现在它会崩溃。开发者可以通过调用 builder API 来选择清除行为。b/63872392
API 更改
向
RoomDatabase.Builder
添加了fallbackToDestructiveMigration()
方法,用于在缺少迁移时清除数据库。b/63872392Architecture Components 现在依赖于 Support Library 26.0.0
错误修复
修复了处理嵌套在 @Embedded 中的 @Relation 的问题。b/63736065
修复了带有自增主键的表的迁移测试。b/63393618
现在,运行 DELETE 或 UPDATE 查询的 @Queries 可以正确接收参数。b/63872538
现在,当拥有者 fragment 在返回栈中并且配置更改发生两次时,ViewModels 也会被保留。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修复了 Room 对 getter 和 setter 的类型检查。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
现在只支持一个事件参数。这是为 Java 8 支持做准备的更改,以便我们将来可以迁移到带有默认方法的接口。与此更改相关,只有带有@OnLifecycleEvent(ON_ANY)
注解的方法才能接收类型为Event
的第二个参数(第一个参数是LifecycleOwner
)。有关详细信息,请参阅 Lifecycle 文档。LifecycleActivity
和LifecycleFragment
类已移至android.arch.lifecycle:extensions
工件。MigrationTestHelper 接收 Instrumentation 实例而不是
Context
,以便能够从测试资产中读取模式并在应用程序上下文中创建数据库。@Insert
、@Delete
和@Update
注解在@DAO
方法中现在可以将Iterable
作为参数类型。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 界面。(b/38481640)
错误修复
- 生命周期文件的 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 版本发布时准备好迁移指南。
已知限制和问题
- Support Library 中的 Lifecycle
Fragment
和ActivityCompat
尚未实现LifecycleOwner
接口。它们将在 Architecture Components 达到 1.0.0 版本时实现。