【问题标题】:How to close realm opened by Realm.getDefaultInstance?如何关闭由 Realm.getDefaultInstance 打开的领域?
【发布时间】:2016-05-09 10:11:00
【问题描述】:

我正在使用领域来存储和检索数据。通常当我们打开一个领域来存储一些我们喜欢的数据时:

Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
// Copy the object to Realm
realm.copyToRealm(myObject);
realm.commitTransaction();
realm.close();

在上述情况下,我将关闭领域。

但是当我检索一些数据时:

RealmResults<MyClass> results = Realm.getDefaultInstance().where(MyClass.class).findAll();

如何关闭这个领域?需要关闭吗?

【问题讨论】:

    标签: android realm


    【解决方案1】:

    单线操作意味着你无法关闭领域,所以我建议不要这样做。

    在最好的情况下,不关闭 Realm 会导致内存泄漏,并且如果处于后台,则更有可能被系统杀死。在最坏的情况下,您会看到磁盘使用量大幅增加,因为 Realm 必须跟踪打开的 Realm 实例的所有版本(由于是 MVCC 数据库)。

    我强烈建议您使用您的第一个模式。有关控制 Realm 实例的更多信息,您可以阅读以下内容:https://realm.io/docs/java/latest/#realm-instance-lifecycle 和此 https://realm.io/news/threading-deep-dive/

    【讨论】:

    • 感谢您的澄清。
    • 但是 Logcat 中的警告叫 Remember to call close() on all Realm instances. Realm /data/data/com.foo.bar/files/default.realm is being finalized without being closed, this can lead to running out of native memory. 呢?
    • 领域领域 = Realm.getDefaultInstance(); int comLog = realm.copyFromRealm(realm.where(CommitLog.class) .equalTo("conversationId", cache.getConversationId()) .findFirst()).getCommitMessages().size();领域.close();如果我这样做,如果它导致任何泄漏或导致空指针异常怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多