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日
导航
导航 1.0.0-alpha09
版本已发布。此版本包含破坏性 API 更改;请参阅下面的“破坏性更改”部分。
我们已选择不再开发 android.arch.navigation:navigation-testing
工件。虽然它已被证明有助于对 NavController
进行内部测试,但我们强烈建议采用其他测试策略,例如模拟 NavController
实例以验证是否正在进行正确的 navigate()
调用。这种方法在AndroidDevSummit 2018 的单活动演讲中进行了详细讨论,我们将致力于编写更多关于使用导航进行测试的文档。
新功能
- 具有
menuCategory="secondary"
的MenuItem
将不再在与NavigationUI
方法一起使用时弹出返回堆栈。b/120104424 AppBarConfiguration
现在允许您设置一个回退OnNavigateUpListener
实例,当navController.navigateUp()
返回false
时将调用该实例。b/79993862 b/120690961
破坏性更改
- 当使用带有
argType="reference"
的<argument>
时,导航不再解析引用,而是直接提供原始资源 ID 本身。b/111736515 onNavDestinationSelected()
现在默认情况下会返回到导航图的起始目的地,使其与setup
方法保持一致。将menuCategory="secondary"
添加到您的MenuItem
以避免弹出返回堆栈。aosp/852869- 生成的
Args
类的fromBundle()
方法现在采用非空Bundle
而不是可空Bundle
aosp/845616
错误修复
- 参数现在可以从深层链接中正确解析为正确的
argType
,而不是始终作为字符串解析 b/110273284 - 导航现在可以正确导出其公共资源 b/121059552
- Safe Args 现在与 Android Gradle Plugin 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日
分页
分页 2.1.0-rc01
版本已发布,与 2.1.0-beta01
版本相比没有变化。
导航
导航 1.0.0-alpha08
版本已发布。此版本包含破坏性 API 更改;请参阅下面的“破坏性更改”部分。
新功能
- 目的地标签在与
NavigationUI
方法一起使用时,现在将自动替换android:label
中的{argName}
实例为正确的参数 b/80267266 - 导航现在依赖于 Support Library 28.0.0 b/120293333
破坏性更改
OnNavigatedListener
已重命名为OnDestinationChangedListener
b/118670572OnDestinationChangedListener
现在还会传递参数的Bundle
aosp/837142app:clearTask
和app:launchDocument
属性及其关联的方法已被删除。使用app:popUpTo
和您的图的根来从返回堆栈中删除所有目的地。b/119628354ActivityNavigator.Extras
现在使用构建器模式,并增加了设置任何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 - 片段创建已移至
FragmentNavigator
,这使得更容易将片段创建委托给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。要修复任何构建问题,您可以使用Arrays.asList(...)
包装现有的 varargs。我们仍然包含每个方法的单参数版本。 *这是一个破坏性更改。* - 删除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们提供了一个令人困惑的 API;现有的combine
方法更容易理解。 *这是一个破坏性更改。*
错误修复
- Marshmallow 之前的实现现在在恢复已执行任务的进程死亡方面更加可靠。
- 通过
observeForever
观察到的LiveData
将通过 WorkManager 进行跟踪。这是 Room 库修复程序的反向移植。b/74477406 Data.Builder.build()
现在会在序列化对象超过其最大大小时抛出异常。以前,这只会发生在后台线程中,您无法正确处理它。- 进一步区分了已停止和已取消的工作;在
ListenableWorker.onStopped()
期间,getWorkInfoById()
将返回一个状态为CANCELLED
的WorkInfo
。 - 在
ListenableWorker
中将null
Result
视为失败。 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
的方法。 - 添加了
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
现在接受字符串而不是枚举。这允许 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 更改”部分。
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,用于在无需创建WorkContinuation
的情况下排队唯一的OneTimeWorkRequest
。 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 artifact
中,并将不再发布。navigation-testing
artifact 现在依赖于 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 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 交换与其他 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 更改
- 删除了所有先前
已弃用
的方法和类,特别是默认的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
现在可以声明在使用 auto value 注解的类的抽象方法中。请注意,这些注解也必须伴随@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
版本发布,包含一个错误修复。
分页
错误修复
- 修复了使用
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
- 如果存在,Navigation 目标 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") } }
错误修复
- 添加了另一个修复程序,这是“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
- **破坏性变更:**为了避免与ConstraintLayout 2.0.0-alpha1等其他库冲突,
app:type
已更改为app:argType
。b/111110548 - Safe Args的错误消息现在可点击。b/111534438
- Args类现在确认
NonNull
属性实际上不为空。b/111451769 - 已向NavDirections和Args生成的类添加了额外的
NonNull
注释。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
- FragmentManager保存状态后,FragmentNavigator现在忽略导航操作,避免“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”的defaultValues。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 Plugin 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
时出现重复作业的问题。具有Content 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)
,这有助于定义WorkManager
可以使用的一系列安全的JobScheduler
作业ID。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
的WorkRequest
,或者在id
不可用时移除它们。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生命周期方法中调用navigate时出现的
IllegalStateException
。b/79632233Navigation现在依赖于Support Library 27.1.1来修复使用动画时的闪烁问题。b/80160903
修复了当使用defaultNavHost="true"作为子片段时出现的
IllegalArgumentException
。b/79656847修复了使用NavDeepLinkBuilder时出现的
StackOverflowError
。b/109653065修复了导航回嵌套图时出现的
IllegalArgumentException
。b/80453447修复了使用
launchSingleTop
时片段重叠的问题。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修复了一个导致
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
。为使用持续时间和
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
发布,以及两个新的架构组件 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 的“数据库”组件)都添加了作为 AndroidX alpha 版本一部分的 Kotlin 扩展库。此外,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
) 发布,并且将在其稳定之前暂时单独进行版本控制。
这个新库提供了一个 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();
分页
新功能
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/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。(参见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
现在已正确支持Paging查询。b/72600425Room现在正确地命名生成的
Dao
类,以避免当2个或多个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.ItemCallback
- 更新
PagedListAdapterHelper
的所有引用为AsyncPagedListDiffer
- 更新
setList()
的引用为submitList()
- 重命名以阐明列表差异的异步特性
错误修复
- 修复了在禁用占位符时将不正确的初始位置传递给初始加载的错误。b/73513780
2018年2月15日
Room 1.1.0-alpha2
已发布。
新功能
Room现在支持在预写日志模式下打开数据库。在此模式下,您的写入将不再阻塞您的读取查询。即使它会消耗更多内存(由于多个连接),此模式通常更快。默认情况下,如果设备是
API 16
或更高版本并且不是低内存设备,Room将使用WAL。您可以使用setJournalMode()
方法在RoomDatabase.Builder
上控制此行为。b/67757002**Guava支持:**Room现在支持在
DAO
查询中返回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
库进行了一处更改。
错误修复
候选版本 - 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/62473121 - 现在可以使用
@Transaction
注解Query
方法。有关详细信息,请参阅@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
- 当
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
- 当
@Query
方法中返回的Pojo具有与查询响应中的任何列都不匹配的@NonNull
字段时,Room现在会在编译时打印错误。如果该字段为@Nullable
,Room只会打印警告。b/67115337 - Room现在在较新的操作系统版本中验证索引。b/63132683
- 如果Pojo中存在多个匹配的构造函数,Room默认选择无参数构造函数。b/67353427
- 如果单列主键是
Integer
或Long
类型,则可以为Nullable
。b/67086876 - 失效跟踪器在测试模式下正确处理重入。b/65471397
- Room现在在编译时检查列名和表名中的无效字符(无效字符:
`
,"
)。b/64749111
- 当
2017年9月21日
通过此版本,所有架构组件模块都至少达到beta 1
版本(新的分页库除外,它是alpha 2
)。
我们不计划进行更多API更改。可能会发生非计划的更改,但在1.0.0
稳定版之前更改任何API的门槛非常高,不太可能发生。
- 在
1.0.0
稳定版之前将移除LifecycleActivity和LifecycleFragment。使用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
中的一个bug,您需要添加对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
- 除非使用
@ColumnInfo
、@Embedded
或@Relation
注解,否则现在默认忽略transient
字段。b/62600692 - 主键必须使用
@NonNull
注解,除非它们是自动生成的。b/64292391- 此更改可能需要架构迁移。对于由此带来的不便,我们深感抱歉。
- 添加了一个新的便捷注解(@Transaction),它覆盖
DAO
方法并在事务中运行它。
支持SQLite数据库
- 数据库配置中的API更改。b/65349673 b/65499876
分页
- 改进的分页文档,包含更多示例和线程注释。
错误修复
- 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中的一个错误,即当第一个观察者从其
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
之前添加,它将先于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
现在,当拥有者片段位于返回堆栈中并且配置更改发生两次时,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
错误修复
修复了
byte[]
在@Dao
方法中的处理。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
。@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)
错误修复
- 用于生命周期的 Proguard 文件。(b/62113696)
- 使用类型转换器导致数据丢失。(b/62100716)
- 允许从
@Insert
查询返回Long[]
。
1.0.0 Alpha 1 - 2017年5月17日
最低SDK版本 14
常规建议
虽然我们在发布前进行了大量的测试,但架构组件 目前仍处于 Alpha 阶段。如果您正在构建生产应用,请注意 API 将在 1.0 版本发布之前发生更改,并且可能不够健壮。如果您不习惯调试所用库中的问题,建议您先在副项目中尝试架构组件。
我们不建议每个人现在都迁移。我们将为架构组件的 1.0 版本准备好迁移指南。
已知限制和问题
- Lifecycle
Fragment
和ActivityCompat
在 支持库 中尚未实现LifecycleOwner
接口。当架构组件达到 1.0.0 版本时,它们将实现该接口。