应用程序大小因android领域而增加

应用程序大小因android领域而增加,android,realm,Android,Realm,每隔15秒,我会通过一个服务将一些数据添加到领域数据库中 一整晚之后,由于realm的原因,应用程序的大小变成了350mb 但如果我从realm中删除数据,经过一些条件后,数据会被删除,但应用程序的大小仍然显示为350mb 问题是为什么应用程序大小现在没有缩小。Realm当前不会自动回收数据库使用的空间,但如果以后再次添加数据,它将被重新使用 如果希望释放磁盘空间,可以使用Realm.compactRealm(): 然而,350 MB的文件大小听起来相当大。您真的插入了那么多数据吗?Realm当

每隔15秒,我会通过一个服务将一些数据添加到领域数据库中

一整晚之后,由于realm的原因,应用程序的大小变成了350mb

但如果我从realm中删除数据,经过一些条件后,数据会被删除,但应用程序的大小仍然显示为350mb


问题是为什么应用程序大小现在没有缩小。

Realm当前不会自动回收数据库使用的空间,但如果以后再次添加数据,它将被重新使用

如果希望释放磁盘空间,可以使用
Realm.compactRealm()


然而,350 MB的文件大小听起来相当大。您真的插入了那么多数据吗?

Realm当前不会自动回收数据库使用的空间,但如果以后再次添加数据,它将被重新使用

    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);
如果希望释放磁盘空间,可以使用
Realm.compactRealm()

然而,350 MB的文件大小听起来相当大。你真的插入了那么多数据吗?

Realm=null;
    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);
RealmConfiguration config=新建RealmConfiguration.Builder(MyApplication.appInstance().getApplicationContext()) .DeleteRealMifMigrationRequired() .build(); 试一试{ realm=realm.getInstance(配置); }捕获(例外e){ } RealmResults result2=realm.where(MqttLocationModel.class).equalTo(“uid”,objectId).findAll(); Log.e(“Delted对象id”,即“+objectId”); Log.e(“Delted DB Size”,“”+result2.Size()); realm.beginTransaction(); 结果2.clear(); realm.commitTransaction(); RealmResults result3=realm.where(MqttLocationModel.class).equalTo(“uid”,objectId).findAll(); Log.e(“Delted final DB Size”,“”+result3.Size()); realm.close(); compactRealm(config);
Realm-Realm=null;
RealmConfiguration config=新建RealmConfiguration.Builder(MyApplication.appInstance().getApplicationContext())
.DeleteRealMifMigrationRequired()
.build();
试一试{
realm=realm.getInstance(配置);
}捕获(例外e){
}
RealmResults result2=realm.where(MqttLocationModel.class).equalTo(“uid”,objectId).findAll();
Log.e(“Delted对象id”,即“+objectId”);
Log.e(“Delted DB Size”,“”+result2.Size());
realm.beginTransaction();
结果2.clear();
realm.commitTransaction();
RealmResults result3=realm.where(MqttLocationModel.class).equalTo(“uid”,objectId).findAll();
Log.e(“Delted final DB Size”,“”+result3.Size());
realm.close();
compactRealm(config);

您的服务在后台线程上执行,因此在整个同步过程中,您可能会在后台线程上打开一个域,从而创建域的多个版本


如果这是真的,您应该在事务完成后关闭并重新打开领域,或者使用
waitForChange()

您的服务在后台线程上执行,因此在整个同步过程中,您可能会在后台线程上打开一个域,从而创建域的多个版本



如果这是真的,您应该在事务完成后关闭并重新打开领域,或者使用
waitForChange()

你能展示一些你是如何删除领域数据的代码吗?你能展示一些你是如何删除领域数据的代码吗?是的,数据每15秒添加一次。。整夜java.lang.IllegalStateException:无法在com.megacabs.app.driver.commons.DBDeleteRow.deleteDBWithObjectId(DBDeleteRow.java:47)的io.Realm.Realm.Realm.Realm.compactRealm(BaseRealm.java:585)和io.Realm.Realm.compactRealm(Realm.java:1200)压缩开放领域在com.megacabs.app.driver.commons.DBDeleteRow.run(DBDeleteRow.java:22)上显示此错误通常是,您需要先关闭领域,然后才能压缩它。在Realm.close之后使用它,仍然会显示此错误。您需要在每个线程上关闭给定领域配置的每个领域实例。是,每隔15秒添加一次数据。。整夜java.lang.IllegalStateException:无法在com.megacabs.app.driver.commons.DBDeleteRow.deleteDBWithObjectId(DBDeleteRow.java:47)的io.Realm.Realm.Realm.Realm.compactRealm(BaseRealm.java:585)和io.Realm.Realm.compactRealm(Realm.java:1200)压缩开放领域在com.megacabs.app.driver.commons.DBDeleteRow.run(DBDeleteRow.java:22)上,它总是向我显示这个错误,您需要先关闭域,然后才能压缩它。在Realm.close之后使用它,仍然会显示此错误。您需要关闭每个线程上给定域配置的每个域实例。E/UncaughtException﹕ java.lang.IllegalStateException:无法在com.megacabs.app.driver.commons.DBDeleteRow.deleteDBWithObjectId(DBDeleteRow.java:47)的io.Realm.Realm.Realm.compactRealm(BaseRealm.java:585)和io.Realm.Realm.Realm.compactRealm(Realm.java:1200)处压缩开放领域位于com.megacabs.app.driver.commons.DBDeleteRow.run(DBDeleteRow.java:22)E/UncaughtException﹕ java.lang.IllegalStateException:无法在com.megacabs.app.driver.commons.DBDeleteRow.deleteDBWithObjectId(DBDeleteRow.java:47)的io.Realm.Realm.Realm.compactRealm(BaseRealm.java:585)和io.Realm.Realm.Realm.compactRealm(Realm.java:1200)处压缩开放领域在com.megacabs.app.driver.commons.DBDeleteRow.run(DBDeleteRow.java:22)中,我每5秒在realm中保存一次lat lng,因此在执行compactRealm(配置)时,我很难检查realm实例是否关闭。。。。我怎么能解决它……我从来没有想过我会这么说,但是我认为你应该考虑把这些值保存到UI线程上的领域。我每隔5秒就在LATE LNG中保存,所以我很难在EE中检查域实例是否关闭。