我是Android编程的新手,甚至更适合使用Room数据库。我已经对Room的Android架构组件进行了一些阅读,并且还阅读了一些教程,用于创建一个简单的工作室数据库。
我还简要阅读了一些在线发现的其他教程。我学到的一些东西是正常的@Insert和@Delete带注释的操作由Room自动处理,但对于任何@Query带注释的操作,我需要确保异步调用它们以避免锁定主UI线程。
许多示例涵盖LiveData以及如何异步使用简单的@Insert和@Delete,LiveData会观察到任何更改,使用LiveData包装的任何数据的ArrayAdaptor会显示更新的信息。
我目前正在使用App来清点图书。 在主要活动中,我想向用户显示所有书籍的列表,上述方法效果很好。我将创建一个如下所示的查询,然后观察任何更改,并允许ListView在表更新时自动更改。
@Query("SELECT * FROM book")
public LiveData<List<Book>> findAllBooks();
但是,我如何异步处理其他@Query操作,如下所示,获取结果并尽快显示,然后将其显示给用户?
@Query("SELECT * FROM book where category = :category")
public List<Book> getBookByCatetory(String category);
当用户想要按类别过滤主书籍列表时,我希望我的应用程序运行上述查询并获取具有指定类别的所有书籍,然后在另一个活动中向用户显示只读列表。它不应该要求任何观察员。这听起来应该是一个同步操作,但不鼓励这样的过程,因为它可能会锁定UI线程。
解决此问题的最佳设计是什么?