By secondary
.realm
file I mean a realm file which is not thedefault.realm
file.
我有两个 .realm
文件——一个是标准的 default.realm
,另一个是 aux.realm
。
正常情况下一切正常,但是当我执行繁重的操作时(多个表经历 .deleteAllFromRealm()
并重新同步所有内容)而这发生在工作线程上,用户仍然可以自由执行任何 UI Activity ,只要执行涉及 aux.realm
实例的任何交互,应用程序就会关闭并出现 ANR。
通过一些广泛的调试,我发现 getAuxRealmInstance
需要很多时间来传递实例,即使它的值应该被缓存。尽管事实上它的配置已经延迟加载了。因此,不清楚为什么要花这么多时间?
我也认为这可能是交易问题,因为一次只能有一个 Activity 交易,但我不确定规则是否也通过文件有效,比如两个 Realm 文件是否可以有自己的事务
并行运行?
我的 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 Realm 实例,ANR 就会消失,如上所述,这指向相同的问题。
环境变量: Realm :5.4.2,Kotlin 1.2.51
最佳答案
我通过缓存 Realm 实例解决了这个问题:
private Realm auxiliaryRealmInstance;
fun getAuxiliaryRealmInstance(): Realm{
return auxiliaryRealmInstance == null ? Realm.getInstance(auxiliaryConfiguration.value) : auxiliaryRealmInstance;
}
这个解决方法应该不是必需的,因为 here据记载,缓存不会使任何事情变得更有效率。但到目前为止我没有注意到任何缺点。
关于android - 辅助 .realm 文件 getInstance 花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51844730/