如何选择性地观察Android Room数据库的INSERT,DELETE和UPDATE事件?

时间:2019-09-15 23:05:20

标签: android android-room rx-android android-architecture-components android-livedata

我已经用这种方法设计了DAO。

@Dao
interface FooDao {

    @Query("SELECT * FROM foo")
    LiveData<List<Foo>> stream();
}

以上内容使我可以一次接收INSERTUPDATEDELETE事件,而我无法知道最近是否插入,删除或更新了数据

目标

我的目标是能够快速更新数据库并使RecyclerView反映所做的更改而不会卡住或完全冻结。

当前情况

我有一个后台服务正在更新数据库,并使用上述方法,我正在使用DiffUtil类来计算差异并相应地在前端更新列表。

问题

由于更新是如此之快,所以RecyclerView被冻结了。我添加了使用RxJava进行的后台处理(DiffUtil计算)(因为无论如何我都在其中),这虽然没有完全消除,却只能显着减少卡顿现象。

理想目标

我需要找出一种方法来单独更新列表,或者尽可能跳过室中仅接收UPDATE个事件,而忽略INSERTDELETE个事件,因为这些已经完成手动,因此应该不能冻结UI。

这样,我可以使用EventBus通知适配器,后台服务已更改了一行,而不会触发Room的UPDATE事件,否则将导致适配器执行DiffUtil计算,从而减慢了使用者介面关闭。

这意味着隔离INSERTDELETEUPDATE的数据库事件,或仅选择性地观察特定事件。

Room是否有这种方法?如果可以,该如何实现?

0 个答案:

没有答案