Android Room - 如何只获取新数据?

Android Room - how to get the new data only?

在数据库中插入一些 message 后,此 Dao 方法的结果是什么:

@Query("SELECT * FROM messages")
Flowable<List<Message>> getMessages();

1 - ALL messages 存储在数据库中将在此更改后发出

2 - 只有 DIFFERENCE beetwen new and old messages will be emitted after the change?

在哪些文件中规定的?如果首先,我应该怎么做才能有所不同 - 比如 DiffUtils 或者还有其他方法?

P.S。如果我 删除 一些消息怎么办?

  1. 所有个存储在数据库中的消息将被发出。
  2. 要获得差异,推荐的方法是使用 DiffUtils as you mentioned. There is a lot of information about how it works and how to implement it. Just to mention a few here you have this Mindorks' tutorial and @iammert tutorial
  3. 如果您不想在某些消息每次更改时都获取所有消息,您可以编写不同的查询。这取决于您的用例,但是,例如,如果您知道旧消息不会更改,则可以查询 return 某个日期后的所有消息。
  4. 如果您删除了一些消息,查询结果将会改变。因此,您将再次发出所有消息。
  5. 我会改用 LiveData<List<Message>>。行为是一样的,你不需要担心处理你的订阅,也不用担心配置更改。但是,当您必须 return 单个结果时,我会使用 SingleMaybe

更新: 无需使用 DiffUtils 获取所有消息并查看它们之间的区别,您可以检索消息的子集并按需更新它。新 Paging library in Android helps you doing this. Again, there is a lot of information around about how to do this so I am not going to put the details of the implementation here because it is out of the scope of the question, but here you have one of the many tutorials 可用。