片段中的领域生命周期

RJF*_*res 5 java realm

根据 Realm 文档,对于正确的领域生命周期处理,必须在每个 onCreate(in Activities) 和 onStart(Frags) 中打开领域实例,然后在每个活动 (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() ,这似乎解决了解决方案,但这只是一个创可贴。

有什么想法吗?

Chr*_*ior 5

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

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

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

  • 我和@RJFares 的情况完全一样。当我从 Activity1>Fragment1 移动到 Activity2,然后返回到 Activity1>Fragment1 时,应用程序不断崩溃。但是我怎样才能实现“在 UI 线程上始终有一个实时 Realm 实例”? (4认同)