领域的生命周期

时间:2015-11-24 18:59:34

标签: java realm

根据Realm文档,对于正确的领域生命周期处理,必须在每个onCreate(在Activities中)和onStart(Frags)中打开realm实例, 然后在每个活动(onDestroy())和frags(onStop())中关闭。

在我的片段中,数据处理是从onCreate()开始的,它发生在onStart()之前。

我决定在onCreate()中的片段中欺骗并实例化mRealm实例。我的片段有一个Recyclerview和RecyclerView.Adapter(不是RealmBaseAdapter,因为我无法弄清楚如何使它适用于recyclerview)。现在问题在于:

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

onCreate / onDestroy用于片段也完全没问题。唯一的缺点是你的片段可能被缓存,这意味着在实际杀死应用程序之前不会调用onDestroy

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

内部Realm缓存是引用计数,因此如果您的所有活动在onCreate期间打开一个Realm并在onDestroy期间关闭它(即使您没有直接在Activity中使用它,那么您应该始终在UI线程上有一个实时的Realm实例。