使用 Android 中的新房间数据库,我需要执行两个顺序操作:
removeRows(ids);
insertRows(ids);
如果我运行它,我会看到(在检查数据库时)缺少一些行 - 我假设它们在插入后被删除。即。第一个操作与第二个操作并行运行。
如果我使用这样的事务块,那么一切都很好 - 第一个操作似乎在执行第二个操作之前完成:
roomDb.beginTransaction();
removeRows(ids);
roomDb.endTransaction();
insertRows(ids);
如果我在中间休息一下也可以:
removeRows(ids);
Thread.sleep(500);
insertRows(ids);
Room 似乎没有太多文档,并且想知道当我要完成顺序操作时是否应该使用上述事务块,或者有没有更好的方法。
编辑:@CommonsWare 指出后,@Query
是异步的,而@Insert
和@Delete
是同步的。鉴于此,我将如何获得一个删除异步行的查询:
@Query("DELETE from table WHERE id IN(:ids)")
int removeRows(List<Long> ids);
根据我得到的构建输出Deletion methods must either return void or return int (the number of deleted rows)
,如果我尝试将返回类型包装在Flowable
.