java-片段中的领域生命周期

根据Realm文档,为了正确处理领域生命周期,必须在每个onCreate(在Activity中)和onStart(Frags)中打开领域实例,
然后在每个活动(onDestroy())和碎片(onStop())中关闭.

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

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

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

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

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

有什么想法吗?

解决方法:

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

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

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

上一篇:java-检查新领域对象是否尚未保存


下一篇:jquery的prop()和attr()