我目前正在创建一个使用预打包数据库的 Android 应用程序。该数据库最初大小约为 40MB,存储在 assets/databases 文件夹中。
问题
当我查看我的应用程序正在使用多少空间时,“应用程序信息”页面显示以下内容:
我认为 ROOM 造成这种情况的原因如下:
Android ROOM 将预打包的数据库存储为 Cache 是否正常? 任何帮助将不胜感激,如果您需要更多信息,请告诉我。
谢谢
编辑(附加信息)
这是我在设备文件资源管理器中看到的
这就是我实现 Room 数据库的方式
@Database(entities = {/* entities*/}, version = 1, exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {
public abstract MyDao myDao();
private static volatile Database INSTANCE;
public static Database getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (MyDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
MyDatabase.class, "database")
.createFromAsset("databases/database.db")
.build();
}
}
}
return INSTANCE;
}
}
最佳答案
我相信您遇到的情况可能是由于以下任一原因:
inMemoryDatabaseBuilder
或 很可能是后者。
不同之处在于,在日志模式下,会保留对数据库所做更改的日志,因此当应用更改并需要新页面时,数据库会增长。而在 WAL 模式下,更改将应用于 -wal 文件,然后在点 (CHECKPOINT) 处将更改应用于数据库文件。因此,在发生 CHECKPOINT 之前,所有更改都存储在 -wal 文件中。
例如
切换到 inMemory 数据库(没有其他更改,因此插入完全相同的数据)然后:-
所以我怀疑 -wal 文件被视为缓存。
关于android - Android Room 将预打包的数据库存储在缓存中是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69826326/