gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:26:45 25 4
gpt4 key购买 nike

By secondary .realm file I mean a realm file which is not the default.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com