我通过服务每隔15秒将一些数据添加到领域数据库中。
经过一整夜,应用程序的大小由于领域而变为350mb,确认..
但是,如果我从领域删除该数据,在某些条件之后,数据被删除但是app的大小仍然显示为350mb。
问题是为什么应用程序大小现在没有缩小。
答案 0 :(得分:2)
Realm目前不会自动回收数据库使用的空间,但如果您以后再次添加数据,它将被重用。
如果您想释放磁盘空间,可以使用51%10
:https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
然而,350 MB的文件大小听起来相当多。你真的插入那么多数据吗?
答案 1 :(得分:0)
Realm realm = null;
RealmConfiguration config = new RealmConfiguration.Builder(MyApplication.appInstance().getApplicationContext())
.deleteRealmIfMigrationNeeded()
.build();
try {
realm = Realm.getInstance(config);
} catch (Exception e) {
}
RealmResults<MqttLocationModel> result2 = realm.where(MqttLocationModel.class).equalTo("uid", objectId).findAll();
Log.e("Delted object id",""+objectId);
Log.e("Delted DB Size",""+result2.size());
realm.beginTransaction();
result2.clear();
realm.commitTransaction();
RealmResults<MqttLocationModel> result3 = realm.where(MqttLocationModel.class).equalTo("uid", objectId).findAll();
Log.e("Delted final DB Size",""+result3.size());
realm.close();
realm.compactRealm(config);
答案 2 :(得分:0)
您的服务在后台线程上执行,因此您可能在同步过程的整个持续时间内在BACKGROUND THREAD上打开一个域,从而创建Realm的多个版本。
如果是这样,您应该在事务后关闭并重新打开Realm,或者使用waitForChange ()
。