辅助.realm文件getInstance花费的时间太长

时间:2018-08-14 15:16:26

标签: android kotlin realm realm-mobile-platform realm-migration

  

“二级” .realm文件是指不是default.realm文件的领域文件。

我有两个.realm文件-一个是标准default.realm,另一个是aux.realm

在正常情况下,事情可以正常进行,但是当我在工作线程上执行繁重的操作(多个表经过.deleteAllFromRealm()并重新同步所有内容)时,用户仍然可以自由执行任何操作UI活动,只要执行涉及aux.realm实例的任何交互,该应用都会使用ANR关闭。

通过一些广泛的调试,我发现getAuxRealmInstance花费了很多时间来传递实例,即使它的值应该被缓存。尽管事实上它的配置已经延迟加载了。因此,尚不清楚为什么要花费这么多时间?

我也可能是事务问题,因为一次只能有一个活动事务,但是我不确定这是否对文件也有效,就像两个领域文件是否有自己的规则一样transactions并行运行?

我的aux.realm文件:

private const val FILE_NAME = "auxiliary.realm"
private val auxiliaryConfiguration  = lazy {
    RealmConfiguration.Builder()
            .name(FILE_NAME)
            .schemaVersion(AuxiliarySchemaVersionMappings.CURRENT_SCHEMA_VERSION)
            .modules(AuxiliaryRealmModule())
            .initialData {
                Log.d("AuxRealm", "running initial data migration: ")
                // initial version..
                // migrate the AppMetaData table from base realm to aux realm
                }
            }
            .migration(AuxiliaryRealmMigration())
            .build().also { Log.d("AuxRealm", "configuration created: ") }
}

fun getAuxiliaryRealmInstance(): Realm{
    return Realm.getInstance(auxiliaryConfiguration.value)
}

fun getAuxiliaryRealmInstanceAsync(callback: Realm.Callback): RealmAsyncTask{
    return Realm.getInstanceAsync(auxiliaryConfiguration.value, callback)
}

PS:如果我以异步方式加载aux领域实例,则ANR消失,如上所述,这指向相同的问题。

Env变量:领域:5.4.2,Kotlin 1.2.51

1 个答案:

答案 0 :(得分:0)

我通过缓存领域实例解决了这个问题:

private Realm auxiliaryRealmInstance;

fun getAuxiliaryRealmInstance(): Realm{
return auxiliaryRealmInstance == null ? Realm.getInstance(auxiliaryConfiguration.value) : auxiliaryRealmInstance;
}

此变通办法应该是不必要的,因为here的写法是缓存不会使任何事情变得更有效率。但到目前为止,我还没有发现任何不利之处。