我已经用这种方法设计了DAO。
@Dao
interface FooDao {
@Query("SELECT * FROM foo")
LiveData<List<Foo>> stream();
}
以上内容使我可以一次接收INSERT
,UPDATE
和DELETE
事件,而我无法知道最近是否插入,删除或更新了数据
我的目标是能够快速更新数据库并使RecyclerView反映所做的更改而不会卡住或完全冻结。
我有一个后台服务正在更新数据库,并使用上述方法,我正在使用DiffUtil类来计算差异并相应地在前端更新列表。
由于更新是如此之快,所以RecyclerView被冻结了。我添加了使用RxJava进行的后台处理(DiffUtil计算)(因为无论如何我都在其中),这虽然没有完全消除,却只能显着减少卡顿现象。
我需要找出一种方法来单独更新列表,或者尽可能跳过室中仅接收UPDATE
个事件,而忽略INSERT
和DELETE
个事件,因为这些已经完成手动,因此应该不能冻结UI。
这样,我可以使用EventBus通知适配器,后台服务已更改了一行,而不会触发Room的UPDATE
事件,否则将导致适配器执行DiffUtil计算,从而减慢了使用者介面关闭。
这意味着隔离INSERT
,DELETE
和UPDATE
的数据库事件,或仅选择性地观察特定事件。
Room是否有这种方法?如果可以,该如何实现?