私は自分のアプリケーション内で使用する領域データベースを持っています。 ファイルのサイズは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();
}
}
}
そして私はもう一度確認してください。ファイルはまだ7 MBですが、空です。内部にはレルムオブジェクトはありません。 同じデータをもう一度取得すると、14MBになります。そのデータを削除すると、14MBの空き容量があり、21に増加します。それはそれが巨大なファイルになる原因になります。そして、私はこれが起こるべきではないと確信しています。なぜレルムはこれをしますか? これは私が話しているファイルです:Realm FAQから https://www.dropbox.com/s/ri95yiwjutjiki6/myrealm.realm?dl=0
通常は、バックグラウンドスレッド上で非閉じのRealmインスタンスによって引き起こされます。バックグラウンドスレッドで開いたRealmインスタンスがありますか?スレッドが終了したときに閉じられていませんか? https://realm.io/docs/java/latest/#faq-large-realm-file-size – beeender