我有一个我在应用程序中使用的领域数据库。文件的大小为7MB。它内部有不同的对象。但是随后我称此功能:
public static void deleteRealm(Context context) {
Realm realm = PSApplicationClass.getInstance().getRealm();
try {
Log.i("", "realm start");
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.delete(Destination.class);
realm.delete(TripStep.class);
realm.delete(TripStop.class);
realm.delete(Route.class);
realm.delete(RealmLocation.class);
realm.delete(CoordLocation.class);
realm.delete(PSTrip.class);
realm.delete(PSUser.class);
realm.delete(UserVehicle.class);
realm.delete(Vehicle.class);
realm.delete(MileageRates.class);
realm.delete(PSUserActivityMonth.class);
realm.delete(PSUserActivityWeek.class);
realm.delete(PSUserActivityYear.class);
realm.delete(Activity.class);
realm.delete(PSTripsStats.class);
realm.delete(Report.class);
realm.delete(Setting.class);
realm.delete(AddressComponent.class);
realm.delete(RealmString.class);
realm.delete(RealmInt.class);
realm.deleteAll();
}
});
Log.i("", "realm end");
} catch (Exception e) {
Log.i("", "realm continue initTrip error trying to add to realm:" + e.getMessage());
if (realm.isInTransaction()) {
realm.cancelTransaction();
}
}
}
我再次检查。该文件仍然具有7 MB,但它是空的。里面没有领域对象。更重要的是,如果我再次获得相同的数据,它将增长到14MB,因此,当我删除数据时,它将具有14MB为空,然后成长为21 ...等等。这使其成为一个巨大的文件。而且我很确定这不应该发生。领域为什么这样做?这是我正在谈论的文件:https://www.dropbox.com/s/ri95yiwjutjiki6/myrealm.realm?dl = 0
来自领域常见问题,这是可以预期的,数据库最终将重复使用该空间。
话虽如此,您可以通过调用Realm#compactRealm(RealmConfiguration)
来强制数据库压实。请参阅文档。