我正在使用Realm作为我的React Native应用程序。我正在为我的组件提供Realm实例,如官方example app:
所示 export default new Realm({schema: [Todo, TodoList]});
。
当我随后用Jest进行测试时,我意识到只要我不打电话,这个过程就没有完成
afterAll(() => {
realm.close();
});
在测试套件的末尾。
这使我想到是否以及何时应该在生产代码中调用realm.close()
。没有打电话给关闭有什么后果?如果推荐,关闭Realm实例的最佳方法是什么?
答案 0 :(得分:6)
realm.close()
。在Realm api页面中,它说明如下:
close():关闭此Realm,以便可以使用较新的架构版本重新打开它。调用此方法后,此Realm中的所有对象和集合都不再有效。
如果您不想更改架构,则不必担心close
方法。
此处完整参考:Realm close method。
答案 1 :(得分:1)
一些好的,直接的参考文献:
Realm
实例是引用计数的-如果您在线程中两次调用getInstance
,则也需要两次调用close
。这使您可以实现Runnable
类,而不必担心哪个线程将执行它们:只需以getInstance
开始并以close结束。
在执行事务时(通常在后台线程中):
Realm
实例executeTransaction
close()
立即例如:
Realm.getDefaultInstance()
// use will close realm after the transaction is finished/failed
.use { realm ->
// DO NOT execute read/write operations outside of a transaction...
// because it will lead to stale reads, exceptions, and other problems
realm.executeTransaction { realm ->
// do things in the transaction (both reading & writing)
}
}
在主/ UI /循环器/处理程序线程上,保持Realm
的实例处于打开状态,因为您通常想听听从{{1 }}实例:
RealmResults
实例Realm
d。例如:
Realm