Android Realm文件大小

我是android编程的新手。 我为我的简单成绩跟踪器实现了Realm,然而,文件大小从1.5mb增加到5mb。 这是正常的吗?

我只是在每个使用oncreate的类中添加一个领域实例,只要活动有可能结束,就在realm.close()中添加。 还围绕每个对象创建包装了begin和commit事务。

有没有我做错的东西,结果是巨大的文件大小?

谢谢!

编辑:我的意思是apk大小

如果您有长时间运行的事务,则文件大小可能会增加。 有关说明以及如何减小文件大小,请参阅https://realm.io/docs/java/latest/#faq (“大域文件大小”)。

@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)Realm.compact(RealmConfiguration):您需要关闭所有已打开的Realm数据库的连接,从活动或创建它的位置。 然后你应该调用Realm.compact(yourDb.getConfiguration())。 如果在此紧凑操作之前关闭每个连接,结果将为true,并且数据库将更小,否则它将不会resize,结果将为false。

2)我的compactDb:第二种解决方案是基于做某种“交换机制”,可能会有较慢的性能(在一些大文件,以毫秒计),但肯定会解决大文件的问题,只留下必要的领域到您的数据库的大小。

我创建了我的个人函数“compactDb()”,它将:1。取我的db(领域),2。将其复制到一个名为default-compact.realm的新文件中3.删除我的db(领域)4。复制文件default-compact.realm to my db(new file with extension realm)5。删除default-compact.realm,因为我们不再需要它们了

这个“复制东西”将删除旧版本的数据库并仅复制最后一个(数据库的实际大小)。 由于下一步是删除您当前的数据库,那么您将摆脱这些文件… 🙂

这是我的代码:

  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(); } 

该function的用法是:

 compactDb("default.realm"); 

并将您的Realm数据库调整为实际大小…有一个快乐的编码:)