내 응용 프로그램에서 사용하는 영역 데이터베이스가 있습니다. 파일의 크기는 7MB입니다. 그것은 내부의 다른 물건을 가지고 있습니다. 그러나 나는이 함수를 호출 :영역 DB 객체를 삭제하지만 모든 객체가 비어 있더라도 영역 파일 크기는 동일하게 유지됩니다. 시간이 지나면 너무 커집니다.
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();
}
}
}
을 그리고 난 다시 확인. 파일은 여전히 7MB이지만 비어 있습니다. 안에 영역 객체가 없습니다. 동일한 데이터를 다시 얻으면 14MB로 늘어나므로 데이터를 삭제하면 14MB가 비어서 21로 증가합니다 ... 등등. 어느 것이 거대한 파일이 될 수 있습니다. 그리고 나는 이런 일이 일어나지 않을 것이라고 확신합니다. 왜 렐름이 이것을합니까? 이 내가 이야기하고있는 파일입니다 : Realm FAQ에서 https://www.dropbox.com/s/ri95yiwjutjiki6/myrealm.realm?dl=0
일반적으로 이는 백그라운드 스레드의 닫히지 않은 영역 인스턴스로 인해 발생합니다. 백그라운드 스레드에서 열려있는 영역 인스턴스가 있습니까? 스레드가 종료되면 닫히지 않습니까? https://realm.io/docs/java/latest/#faq-large-realm-file-size – beeender