android - 如何选择性地观察 Android Room 数据库 INSERT、DELETE 和 UPDATE 事件?
问题描述
我用这种方式设计了 DAO。
@Dao
interface FooDao {
@Query("SELECT * FROM foo")
LiveData<List<Foo>> stream();
}
以上让我可以同时接收INSERT
、UPDATE
和DELETE
事件,我无法知道数据是最近插入、删除还是更新。
目标
我的目标是能够快速更新数据库并让 RecyclerView 反映更改而不会卡顿或完全冻结。
现在的情况
我有一个后台服务正在更新数据库并使用上述方法,我正在使用DiffUtil类来计算差异并在前端相应地更新列表。
问题
因为更新来得太快了,RecyclerView 被冻结了。我使用 RxJava 添加了后台处理(DiffUtil 计算)(因为无论如何我都有它),这只是显着减少了口吃,但不是完全。
理想目标
我需要找到一种单独更新列表的方法,或者如果可能的话,跳过只接收UPDATE
来自 Room 的事件INSERT
和DELETE
事件,因为这些是手动完成的,所以应该无法冻结 UI。
这样,我可以使用 EventBus 来通知适配器从后台服务更改了一行,而不会触发UPDATE
来自 Room 的事件,否则会导致适配器执行 DiffUtil 计算,从而减慢 UI。
INSERT
这意味着为、DELETE
和UPDATE
/或仅选择性地观察特定事件隔离数据库事件。
Room 有没有这样的方法,如果有,我该如何实现?
解决方案
推荐阅读
- python - 使用 DisplaCy 将 SpaCy 渲染文件保存为 SVG
- ios - 方法不能标记为@objc,因为参数3的类型不能在Objective-C中表示
- php - 我的代码在 laravel 辅助函数 dd() 之外不起作用
- ajax - 在ajax成功中打印返回值数组
- html - 我的电子邮件签名中的徽标图标飞到网络浏览器的最右侧,但我希望它的位置准确
- php - 如何创建重定向表单
- python - 为什么在我在表中添加列后,vertica 不摄取数据?
- java - 如何将 iaik.pkcs.pkcs11.objects.GenericSecretKey 转换为 java.security 密钥
- data-structures - 迭代程序的时间复杂度分析需要说明
- docker - Kubernetes私有注册中心(gitlab)镜像拉取不同节点