У меня поток, выполняемый каждую секунду, который обновляет поля базы данных Realm каждую секунду. Хотя обновляемые данные крошечные, я обнаружил, что обновления по-прежнему увеличивают размер файла базы данных до тех пор, пока вы явно не очистите его с помощью Realm.compressRealm()
, поэтому в течение часа или двух размер db равен 50 Мбайт + и будет легко раздуваться до 750 МБ + за короткий период времени Что ж.Realm большой размер db из-за частых обновлений
Я закрываю Сферу с realm.close()
в деятельности onStop()
, а также закрытие нового Realm экземпляра я создаю в потоке таймера:
public void checkDealersTimer() {
RealmResults<Dealers> dealersLookup = realm.where(Dealers.class).equalTo("thedealers","thedealers").findAll();
dlr = dealersLookup.get(0);
if (dlr.getPerSecond() != 0.00) {
if (dealerTimer == null) {
dealerTimer = new Timer();
dealerTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Realm drealm;
drealm = Realm.getDefaultInstance();
RealmResults<Dealers> dealersLookup = drealm.where(Dealers.class).equalTo("thedealers","thedealers").findAll();
dlr = dealersLookup.get(0);
drealm.beginTransaction();
dlr.setEarnings(dlr.getEarnings()+dlr.getPerSecond());
drealm.commitTransaction();
drealm.close();
}
}, 0, 1000);
}
}
}
Этот таймером является единственным местом, я использую Realm вне потока пользовательского интерфейса , и единственное место, где я делаю обновления настолько частыми, поэтому я предполагаю, что «утечка» исходит отсюда, хотя я не могу быть уверен. Размер файла становится видимым или нет, но только при его запуске.
Вот еще один пользователь с аналогичным вопросом: App size increase due to realm android
Если, как полагают, решение, я не могу найти правильный способ вызова Realm.compressRealm()
, так как БД предполагается обновлять каждый второй, когда вы используя его, и я могу закрыть только Сферу onDestroy()
не onStop()
(и Realm.compressRealm()
требует, чтобы закрыть все Realms)
Я ценю любой вклад, спасибо!
Если вы закрыли экземпляр Realm после использования (особенно те, которые были в потоке non-looper, поскольку они не будут обновляться и блокируются специальной версией данных навсегда), обычно нет необходимости называть ' compactRealm() 'и размер файла не будет слишком большим. Поэтому взгляните на ответ @oddmeter. – beeender