我是Android编程新手。我为我的简单成绩跟踪器实现了Realm,然而,文件大小从1.5mb增加到5mb。这是正常的吗?
我只是在每个使用oncreate的类中添加一个领域实例,只要活动有可能结束,就会在realm.close()中添加。还围绕每个对象创建包装了begin和commit事务。
我做错了什么导致了大量的文件?
谢谢!
编辑:我的意思是apk尺寸
答案 0 :(得分:5)
@geisshirt是对的。 Realm引入了方法public static boolean compactRealm(RealmConfiguration configuration)
来压缩领域数据库。调用此方法会将我的数据库大小从+ 350MB减少到<1MB
此处提供的文档: https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
答案 1 :(得分:4)
如果您有长时间运行的事务,文件大小可能会增加。有关说明以及如何减小文件大小,请参阅https://realm.io/docs/java/latest/#faq(“大域文件大小”)。
答案 2 :(得分:3)
我已经研究过并尝试了所有东西,所以不要浪费你的时间。 有两种可能的解决方案:
1)Realm.compact(RealmConfiguration): 您需要关闭已打开的Realm数据库的所有连接,活动或创建它的位置。然后你应该调用Realm.compact(yourDb.getConfiguration())。 如果在紧凑操作之前关闭每个连接,结果将为真,数据库将变小,否则不会调整大小,结果将为false。
2)我的那种compactDb: 第二种解决方案是基于做某种&#34;交换机制&#34;可能会有较慢的性能(在某些大型文件中,以毫秒为单位计算),但肯定会解决大文件的问题,并只为您的数据库留下必要的领域大小。
我创建了我的个人功能&#34; compactDb()&#34;那会: 1.拿我的db(领域), 2.将其复制到名为default-compact.realm的新文件中 3.删除我的db(领域) 4.将文件default-compact.realm复制回我的数据库(带扩展领域的新文件) 5.删除default-compact.realm,因为我们不再需要它们了
这&#34;复制品&#34;将删除旧版本的数据库并仅复制最后一个(数据库的实际大小)。由于下一步是删除您当前的数据库,然后您将删除这些文件......:)
这是我的代码:
public void compactDb(String dbName){
try{
//move compacted db to new one...
Realm db = Realm.getInstance(getConfig(dbName));
File compactedFile = new File(db.getConfiguration().getRealmDirectory(), "default-compacted.realm");
compactedFile.delete();
db.writeCopyTo(compactedFile);
db.close();
Realm compactedDb = Realm.getInstance(getConfig("default-compacted.realm"));
File dbFile = new File(compactedDb.getConfiguration().getRealmDirectory(), dbName);
dbFile.delete();
compactedDb.writeCopyTo(dbFile);
compactedDb.close();
compactedFile.delete();
}catch (Exception e){
e.printStackTrace();
}
}
帮助函数,它将为我提供我通过代码使用的所需配置:
private RealmConfiguration getConfig(String name) {
return new RealmConfiguration.Builder()
.name(name)
.schemaVersion(0)
.build();
}
此功能的用法是:
compactDb("default.realm");
并且您的Realm数据库将调整为实际大小... 有一个快乐的编码:)
答案 3 :(得分:2)
如先前的回答中所述,有时需要处理default.realm文件,因为如果您执行很多领域操作,它可能会增加。经过大量测试,处理了许多不同线程的寄存器后,我发现这个文件有1.7GB。
在按我显示的方式将领域配置为紧凑后,该文件减小为<1MB。
中的更多详细信息但是,一种简单的方法是在构建领域配置时调用方法 compactOnLaunch 。
Realm.init(this);
objRealmConfig = new RealmConfiguration.Builder()
.schemaVersion(2)
// WARNING: Use compact to reduce the size of default.realm. A Realm file usually contain free/unused space.
// This method removes this free space and the file size is thereby reduced
// If the app do a lot of operations with Realm, use this method to compact and release free/unused space.
// More details in: https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
.compactOnLaunch()
.build();
Realm.setDefaultConfiguration(objRealmConfig);