可以在主线程上写入 Realm 吗?
基本上我想ObjectA
在开始之前给 Realm写一些ActivityA
。
一旦ActivityA
启动,它需要立即访问(in onCreate
)ObjectA
- 我也可以在主线程上阅读吗?
基本上这ObjectA
太大了,无法通过捆绑包,所以我需要将它存储在缓存中。
我最初考虑将对象存储在内存缓存中,然后在活动开始后将其存储在 Realm 中,但我想知道是否可以跳过编写自己的内存缓存。
可以在主线程上写入 Realm 吗?
基本上我想ObjectA
在开始之前给 Realm写一些ActivityA
。
一旦ActivityA
启动,它需要立即访问(in onCreate
)ObjectA
- 我也可以在主线程上阅读吗?
基本上这ObjectA
太大了,无法通过捆绑包,所以我需要将它存储在缓存中。
我最初考虑将对象存储在内存缓存中,然后在活动开始后将其存储在 Realm 中,但我想知道是否可以跳过编写自己的内存缓存。
可以在主线程上写入 Realm 吗?
在 UI 线程上写入 Realm 有两个含义:
1.)任何由异步查询api创建的RealmResults将在事务打开时立即在UI线程上同步评估
2.) 如果后台线程已经在事务中写入 Realm,那么它将阻塞 UI 线程,直到该事务被提交。
在您的用例中,您似乎依赖 Realm 在 UI 线程上立即缓存单个对象,因此您可以编写(不会被阻塞),并且您需要立即使用单个对象(因此您需要findFirst()
同步 API) .
因此,在您的情况下,在 UI 线程上使用 Realm 很可能是安全的。
一般来说,Realm 的最佳实践是在后台线程上写入 Realm,并在 UI 线程上从 Realm 读取(通过保持对 RealmResults 的字段引用,向其中添加 RealmChangeListener,然后接收对 Realm 所做的每次更改的更新结果) .