2

可以在主线程上写入 Realm 吗?

基本上我想ObjectA在开始之前给 Realm写一些ActivityA

一旦ActivityA启动,它需要立即访问(in onCreateObjectA- 我也可以在主线程上阅读吗?

基本上这ObjectA太大了,无法通过捆绑包,所以我需要将它存储在缓存中。

我最初考虑将对象存储在内存缓存中,然后在活动开始后将其存储在 Realm 中,但我想知道是否可以跳过编写自己的内存缓存。

4

1 回答 1

3

可以在主线程上写入 Realm 吗?

在 UI 线程上写入 Realm 有两个含义:

1.)任何由异步查询api创建的RealmResults将在事务打开时立即在UI线程上同步评估

2.) 如果后台线程已经在事务中写入 Realm,那么它将阻塞 UI 线程,直到该事务被提交。

在您的用例中,您似乎依赖 Realm 在 UI 线程上立即缓存单个对象,因此您可以编写(不会被阻塞),并且您需要立即使用单个对象(因此您需要findFirst()同步 API) .

因此,在您的情况下,在 UI 线程上使用 Realm 很可能是安全的。


一般来说,Realm 的最佳实践是在后台线程上写入 Realm,并在 UI 线程上从 Realm 读取(通过保持对 RealmResults 的字段引用,向其中添加 RealmChangeListener,然后接收对 Realm 所做的每次更改的更新结果) .

于 2017-06-10T00:03:50.370 回答