Android room数据库不立即将数据插入数据库

3

我在我的Android项目中使用Room,一切都运作良好,直到有一天我发现Room不能立即将数据插入数据库。

如何重现

当我运行命令appdatabase.getUserDao().insert(user)并在2秒钟后拔出手机电池并导出数据库后,我发现数据没有插入数据库。这是100%确定的,因为我的团队多次重现了此问题。似乎它会缓存数据一段时间而不是直接存储到数据库中。

是否有解决方法可以使数据直接存储到数据库中而不是缓存?


@zjmo 是正确的,我认为除非你关闭 db,否则它可能仍然在缓存数据库上。但你不必担心这个问题,因为它总是会从数据库提供数据。 - Jeel Vankhede
@JeelVankhede,每次事务中打开和关闭数据库都非常耗费资源。我之前还以为它是从数据库提供数据,但在遇到这个问题后,我发现数据是从缓存中获取的,而不是立即存储在数据库中。因为在设备重启后,它没有获取相同的数据。 - Tarun
2个回答

2

是的,在导出之前关闭数据库:

RoomDatabase.close()

确保它是正确的
Room.databaseBuilder()

而不是

Room.inMemoryDatabaseBuilder()

检查线程是否正常执行,且您没有中断 @Transaction 插入操作。


由于外部因素,如电池脱落/电池电量低/内存不足,手机关闭后我无法在现实世界中关闭数据库。 - Tarun
一旦您插入实体,无论是否缓存,它都将保存在数据库中。在电池充电后,应用程序将能够正常使用数据库...重新启动手机、在导出之前关闭数据库,数据将仍然存在。 - zjmo
@zono,这是我们插入数据库时遇到的主要问题,电池电量太低,导致手机立即关机,重启后从数据库获取数据时,未能获得该值。 - Tarun
我不知道你是否使用内存数据库,如果你在 DAO 事务期间没有关闭电池,那么一切都应该在不到一毫秒的时间内解决。 - zjmo
1
我不知道。我编辑了相关搜索的答案。 - zjmo
显示剩余3条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接