根据 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() ,这似乎解决了解决方案,但这只是一个创可贴。
有什么想法吗?
对片段使用onCreate/onDestroy也完全没问题。唯一的缺点是您的片段可能会被缓存,这意味着onDestroy在应用程序实际被杀死之前不会调用它。
请注意,如果您仅在片段中使用 Realm,则第一个片段关闭和第二个片段打开之间可能没有重叠。这意味着 Realm 将完全关闭并释放所有资源。
内部 Realm 缓存是引用计数的,因此如果您的所有Activity 在此期间打开一个 RealmonCreate并在此期间关闭它onDestroy(即使您没有直接在 Activity 中使用它,那么您应该始终在 UI 线程上有一个实时 Realm 实例。
| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |