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()
调用。这种方法在 2018 年 AndroidDevSummit 上的“单一活动”演讲 中进行了详细讨论,我们将针对使用 Navigation 进行测试编写其他文档。
新功能
MenuItem
带有menuCategory="secondary"
将不再在与NavigationUI
方法一起使用时弹出后退栈。 b/120104424AppBarConfiguration
现在允许您设置一个回退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/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/830663- 对
Navigator
进行了重大重构,无需OnNavigatorNavigatedListener
,而是让navigate
返回导航到的NavDestination
。 Navigator
实例不再可以向NavController
发送弹出事件。考虑使用OnBackPressedCallback
来拦截后退按钮按下并调用navController.popBackStack()
。 aosp/833716
错误修复
popUpTo
现在在目的地是<navigation>
元素时始终有效 b/116831650- 修复了使用嵌套图时导致
IllegalArgumentException
的多个错误 b/118713731 b/113611083 b/113346925 b/113305559 <activity>
目地的dataPattern
属性现在将通过调用toString()
从非字符串参数中填充参数 b/120161365
Safe Args
- Safe Args 支持可序列化对象,包括枚举值。枚举类型可以通过使用没有类名的枚举文字来设置默认值(例如
app:defaultValue="READ"
) b/111316353 - Safe Args 支持所有支持类型 的数组 b/111487504
- Safe Args 现在忽略资源目录的子文件夹 b/117893516
- Safe Args 在适当的地方添加
@Override
注解 b/117145301
2018 年 12 月 5 日
WorkManager
WorkManager 1.0.0-alpha12
已发布。此版本包含一些破坏性 API 更改;请参见下面的破坏性 API 更改部分。此版本很可能作为我们的第一个测试版发布。 alpha12
还包含广泛的文档更新。
API 更改
- 一个新的工件
work-rxjava2
引入了RxWorker
。这是一个ListenableWorker
,它期望一个Single<Payload>
。 - 由于 Firebase JobDispatcher 即将弃用,因此对它的支持已被删除。这意味着当我们进入测试版时,
work-firebase
工件将不再更新。我们将在未来考虑添加替代方案。 - 将
Payload
合并到Result
中。Result
现在是一个“密封类”,具有三个具体实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获取。您的ListenableFuture
现在返回Result
而不是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。要修复任何构建问题,您可以将现有的 varargs 包裹在Arrays.asList(...)
中。我们仍然包含每个方法的单参数版本。这是一个破坏性变更。 - 删除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们提供了令人困惑的 API;现有的combine
方法更容易理解。这是一个破坏性变更。
错误修复
- Marshmallow 之前的实现现在在恢复已执行任务的进程死亡方面更加可靠。
- 通过
observeForever
观察的LiveData
由 WorkManager 跟踪。这是一个 Room 库修复程序的回退。 b/74477406 Data.Builder.build()
现在在序列化对象超过其最大大小时抛出异常。以前,这只会发生在后台线程中,您无法正确处理它。- 进一步区分了已停止与已取消的工作;
getWorkInfoById()
将在ListenableWorker.onStopped()
期间返回带有CANCELLED
State
的WorkInfo
。 - 将
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
而不是Payload
。Worker
不再具有输出Data
的 getter 和 setter 方法。 - 添加了
Operation.await()
和ListenableFuture.await()
Kotlin 扩展方法。 - 将
Operation.getException()
重命名为Operation.getThrowable()
。 ContentUriTriggers
类以及引用它的方法不再对公众开放。- 为了简化 API,已删除
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中的剩余可变参数方法。要解决任何构建问题,您可以将现有可变参数用Arrays.asList(...)
包裹起来。我们仍然包含每个方法的单参数版本。 - 已删除
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们提供了一个令人困惑的 API;现有的combine
方法更容易理解。
2018 年 12 月 4 日
Room
Room 2.1.0-alpha03
已发布,其中包含协程支持和一些错误修复。
API 更改
@Fts3
/@Fts4
中的 FTStokenizer
现在接受 String 而不是枚举。这允许 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 拒绝其他各种
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
上所有变体的enqueue
和cancel
方法现在返回一个新的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
上所有变体的enqueue
和cancel
方法现在返回一个新的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 更改。
新功能
- 一个新的 AppBarConfiguration 类允许您自定义哪些目的地被认为是顶级目的地。有关详细信息,请参阅 更新的文档。 b/117333663
- 您现在可以向图的起始目的地传递参数 b/110300470
- 深层链接现在支持带有句点、连字符和加号的自定义方案。 b/112806402
重大变更
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()
,该方法在主线程上调用。您需要异步启动和处理工作。完成后,您应该相应地更新ListenableFuture
。ListenableFuture
的参考实现是在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
的竞争条件中可能出现的NullPointerException
。 b/116253486 和 b/116677275 WorkContinuation.combine()
现在接受一个或多个WorkContinuation
而不是两个或多个。 b/117266752
破坏性 API 更改
- 删除了所有以前
弃用
的方法和类,特别是默认的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/行为更改
mCallback
和mDatabase
现在在RoomDatabase
中@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
发布,包含一个错误修复。
分页
错误修复
- 修复了使用
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。有关更多信息,请参阅 使用导航架构组件实现导航
- 在
NavigationView
中选择一项现在将关闭任何包含的底部菜单 b/112158843
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)
调用委托给底层Worker
。 b/114125093 - 强制执行 Firebase JobDispatcher 的正确最小回退延迟。 b/113304626
- 改进了库内部的线程保证。
- 纠正了内部
LiveData
重复数据消除的潜在问题。
API 更改
- 您现在可以通过在
WorkManager.Configuration
中指定WorkerFactory
在运行时创建自己的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 日
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 - 仅在需要时启用
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 保存状态后忽略导航操作,避免出现“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
中发布)修复了PagedListAdapter
和AsyncPagedListDiffer
无法发出移动事件信号时的崩溃问题。 b/110711937
2018 年 6 月 26 日
分页
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
记录 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/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
允许您排队唯一的PeriodicWorkRequest
s。 b/79600647WorkManager.cancelAllWork()
取消所有Worker
s。 依赖WorkManager
的库可以通过使用WorkManager.getLastCancelAllTimeMillis()
查询上次调用此方法的时间,以便进一步清理内部状态。添加了
WorkManager.pruneWork()
以从内部数据库中删除已完成的作业。 b/79950952, b/109710758
行为变更
- 为所有
WorkRequest
s 添加了一个隐式标签,它是Worker
的完全限定类名。 这允许您在没有tag
s 或无法获得id
的情况下删除WorkRequest
s。 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 现在依赖于支持库 27.1.1 以修复使用动画时的闪烁问题。 b/80160903
修复了在使用 defaultNavHost="true" 作为子片段时发生的
IllegalArgumentException
。 b/79656847修复了使用 NavDeepLinkBuilder 时发生的
StackOverflowError
。 b/109653065修复了在导航回嵌套图时发生的
IllegalArgumentException
。 b/80453447修复了在使用
launchSingleTop
时发生片段重叠的问题。 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
s 在Application.onCreate()
上重新安排的问题。 b/79660657修复了您可以安排超出操作系统允许的工作量的问题。 b/79497378
将与
Worker
s 相关的唤醒锁的清理移至后台线程。当所有待处理的工作完成时,
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
。为采用持续时间和
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.0
和 Room 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 替代方案,能够构建 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();
分页
新功能
RxPagedListBuilder
通过新的android.arch.paging:rxjava2
工件添加。
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
Lifecycles
只有一个小的变化:android.arch.core.util.Function
已从 arch:runtime
移至 arch:common
。这允许在没有运行时依赖关系的情况下使用它,例如在下面的 paging:common
中。
lifecycle:common
是 lifecycle: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
或使用模拟回调直接测试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
已从接口更改为抽象类,以启用映射功能。
错误修复
- 将构建器更改为 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
类,以避免当 2 个或更多个Dao
接口在同一个包中作为内部类并具有相同的名称时发生命名冲突。 b/73536380Pojo
中的泛型字段类型将被正确解析为扩展类的成员。 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-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。 您可以使用setJournalMode()
方法在RoomDatabase.Builder
上控制此行为。 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
。 - 已将
@NonNull
注释添加到ViewModelProviders
和ViewModelStores
- 已弃用
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
版本。
行为变更
- 在这个版本中,当调用
onSaveInstanceState
时,现在会分发Lifecycle.Event#ON_STOP
(之前,它只是被标记为CREATED
,而没有分发ON_STOP
)。您可以在生命周期文档中了解更多信息。
错误修复
Room
- Room 现在依赖于最新的 xerial 构件,它修复了编译期间的
OutOfMemory
问题。 b/62473121 Query
方法现在可以使用@Transaction
注解。有关详细信息,请参阅关于@Transaction
的参考文档。 b/65112315- Room 中的
StringUtil
类已从公共 API 中移除(它从未被设计为公共 API)。
- Room 现在依赖于最新的 xerial 构件,它修复了编译期间的
Lifecycles
当 Activity 在 API < 24 上被部分覆盖时,
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 的新版本。
错误修复
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
- 如果单列主键是
Integer
或Long
,则可以是Nullable
。 b/67086876 - 失效跟踪器在测试模式下能够正确地处理重新进入。 b/65471397
- Room 现在在编译时检查列名和表名中的无效字符(无效字符:
`
,"
)。 b/64749111
- Room 现在在编译时打印错误信息,如果
2017 年 9 月 21 日
在这个版本中,所有 Architecture Components 模块都至少达到 beta 1
版本(除了新的 Paging 库,它是 alpha 2
)。
我们不计划进行更多 API 变更。可能会出现非计划的变更,但变更任何 API 在 1.0.0
稳定版本发布之前的难度很大,并且不太可能发生。
- LifecycleActivity 和 LifecycleFragment 将在
1.0.0
稳定版本发布之前被移除。在使用 Support Library26.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 数据库
- 数据库配置中的 API 变更。 b/65349673 b/65499876
分页
- 改进了 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 现在依赖于这些库。AppCompatActivity 和 Support 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 日
错误修复
修复了 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 只是会清空数据库,但现在它会崩溃。开发者可以通过调用构建器 API 选择使用清空行为。 b/63872392
API 更改
在
RoomDatabase.Builder
中添加了fallbackToDestructiveMigration()
方法,如果缺少迁移,则清空数据库。 b/63872392架构组件现在依赖于支持库 26.0.0
错误修复
修复了处理嵌套在 @Embedded 中的 @Relation 的方式。 b/63736065
修复了对具有自动递增主键的表的迁移测试。 b/63393618
现在,运行 DELETE 或 UPDATE 查询的 @Queries 可以正确接收参数。 b/63872538
现在,当所有者片段在回退栈中并且配置更改发生两次时,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
工件将 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/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 接收 Instrumentation 实例,而不是
Context
,以便能够从测试资产读取模式并在应用程序上下文中创建数据库。@DAO
方法中的@Insert
、@Delete
和@Update
注释现在可以具有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)
错误修复
- lifecycles 的 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 版本时实现。