2016-05-26 2 views
0

Я добавляю некоторые данные в базу данных realm через каждые 15 секунд через службу.Увеличение размера приложения из-за realm android

После целой ночи, размер приложения становится 350MB из-за область, его подтверждающим ..

Но если я удалить данные из области, после некоторого условия, удаленные данные, но размер приложения по-прежнему показано 350MB.

Вопрос в том, почему размер приложения сейчас не сокращается.

+0

Не могли бы вы показать код, как вы удалили данные о царстве? –

ответ

2

В настоящее время Realm не автоматически восстанавливает пространство, используемое вашей базой данных, но оно будет повторно использовано, если вы позже добавите данные снова.

Если вы хотите, чтобы освободить дисковое пространство можно использовать Realm.compactRealm(): https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-

Однако, размер файла 350 МБ звучит как довольно много. Вы действительно вставляете столько данных?

+0

Да, данные добавляются через каждые 15 секунд .. за всю ночь –

+0

java.lang.IllegalStateException: Невозможно сжать открытое Realm в io.realm.BaseRealm.compactRealm (BaseRealm.java:585) at io.realm. Realm.compactRealm (Realm.java:1200) at com.megacabs.app.driver.commons.DBDeleteRow.deleteDBWithObjectId (DBDeleteRow.java:47) at com.megacabs.app.driver.commons.DBDeleteRow.run (DBDeleteRow. java: 22) Он всегда показывает мне эту ошибку –

+0

Да, вам нужно закрыть Царство, прежде чем вы сможете его сжать. –

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); 
+0

E/UncaughtException: java.lang.IllegalStateException: Невозможно сжать открытое Realm в io.realm.BaseRealm.compactRealm (BaseRealm.java:585) at io.realm.Realm.compactRealm (Realm.java: 1200) at com.megacabs.app.driver.commons.DBDeleteRow.deleteDBWithObjectId (DBDeleteRow.java:47) at com.megacabs.app.driver.commons.DBDeleteRow.run (DBDeleteRow.java:22) –

+0

все еще получаю это error, pls help me –

0

Ваша служба выполняется на фоне потока, так что вы, вероятно, есть одна область открыта на фоне потока в течение всего срока действия синхронизации процедуры, создавая тем самым несколько версий Realm.

Если это правда, вы должны закрыть или снова открыть Королевство после транзакции или использовать waitForChange().

+0

Я сохраняю lat lng в области каждые 5 секунд, поэтому мне было сложно проверить, закрыт ли экземпляр realm или нет при выполнении compactRealm (config) .... как я могу его решить ............ –

+0

Я никогда не думал, что я это скажу, но я думаю, вам стоит рассмотреть вопрос о сохранении этих значений в Realm в потоке пользовательского интерфейса. – EpicPandaForce

Смежные вопросы