Realm 实例未在 Activity#onDestroy 上关闭

Posted

技术标签:

【中文标题】Realm 实例未在 Activity#onDestroy 上关闭【英文标题】:Realm instances not closing on Activity#onDestroy 【发布时间】:2018-01-09 19:37:36 【问题描述】:

我正在关注realm documentation 来管理领域实例,在每个活动中我都使用相同的模式 OnDestroy 的 if 总是返回 Realm 已打开,当我打开下一个活动时,本地实例计数返回已打开的 RealmInstance 数

例如:

SplashActivity#onCreate -> 本地实例计数 = 1

FirstActivitiy#onCreate -> 本地实例计数 = 2

SecondActivity#onCreate -> 本地实例数 = 3

每个Activity 都会不断增加。任何人都知道为什么该活动的领域实例未在onDestroy 上关闭?

我什至尝试在关闭它之后将领域设置为null,但它不会更改实例计数器。

这是我用于测试的代码:

 protected void onCreate(@Nullable Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    setContentView(R.layout.splash_activity);
    realm = Realm.getDefaultInstance();
 

 protected void onDestroy() 
    super.onDestroy();
    Log.e(TAG, "ON DESTROY");
    realm.close();
    if (realm.isClosed()) 
        Log.e(TAG, "REALM IS CLOSED");
     else 
        Log.e(TAG, "REALM IS OPENED");
    

【问题讨论】:

您是否就上述活动致电finish() 是的,我总是调用finish()。调用了 Ondestroy,但打开了 Realm 实例 【参考方案1】:

我猜,您打开新的Activity 而不关闭当前的Activity

如果我是对的,您当前活动的onDestroy 事件将不起作用。在打开新活动之前,您应该 finish() 您当前的活动,或者您可以编写另一个活动事件的代码。因为关闭活动可能会导致未来案例出现问题。也许这可以帮助您找到另一个活动事件: android Activity LifeCycle

【讨论】:

我总是调用finish()。调用了 Ondestroy,但打开了 Realm 实例

以上是关于Realm 实例未在 Activity#onDestroy 上关闭的主要内容,如果未能解决你的问题,请参考以下文章

Activity 未在清单中注册 Lint 警告

Activity 未在 AndroidManifest.xml 中声明,即使它是

正确处理Android上的Realm实例

维护 Realm 的多个实例

Linq 多连接及 left join 实例 记录

EVReflection + Moya + Realm + RxSwift - 无法为 dict 类型创建实例