片段中的领域生命周期

Realm lifecycles in fragments

根据 Realm 文档,为了正确处理领域生命周期,必须在每个 onCreate(in Activities) 和 onStart(Frags) 中打开领域实例, 然后在每个 activity(onDestroy()) 和 frags(onStop()).

中关闭

在我的片段中,数据处理从 onCreate() 开始发生,它比 onStart() 发生得早。

我决定在我的片段中的 onCreate() 中作弊并实例化 mRealm 实例。我的片段有一个带有 RecyclerView.Adapter 的 recyclerview(不是 RealmBaseAdapter,因为我不知道如何让它适用于 recyclerview)。现在问题来了:

java.lang.IllegalStateException: 此 Realm 实例已关闭,无法使用。

这是在调用适配器中的 getItemCount() 之后从 Activity1 Fragment1 移动到 Activity2 Fragment2 时发生的。作为调试,我在调用 getItemCount() 之前使用 logcat 输出 mRealm.isClosed(),这确认了领域不为空且未关闭。可我还是知道领域已经被关闭了!

作为临时解决方案,我禁用了 Fragment1 中的 mRealm.close() 似乎解决了解决方案,但那只是一个创可贴。

有什么想法吗?

片段也可以使用onCreate/onDestroy。唯一的缺点是您的片段可能会被缓存,这意味着 onDestroy 在应用程序实际被终止之前不会被调用。

请注意,如果您仅在片段中使用 Realm,则第一个片段关闭和第二个片段打开之间可能没有重叠。这意味着Realm将完全关闭并释放所有资源。

内部 Realm 缓存是引用计数的,所以如果你所有的活动在 onCreate 期间打开一个 Realm 并在 onDestroy 期间关闭它(即使你没有在 [=21] 中直接使用它=] 那么你应该总是在 UI 线程上有一个实时的 Realm 实例。