记得在所有Realm实例上调用close()但是应该关闭所有内容

时间:2017-07-06 11:49:42

标签: android realm

我在我的应用程序中有一个工作流程,用户可以在其中保存一些内容,之后会出现一个对话框,其中包含要登录的提示。在我的Android监视器中,出现以下警告:"记得在所有Realm实例上调用close()。 Realm /data/data/files/default.realm正在最终确定而未被关闭,这可能导致本机内存耗尽。"

我已经阅读了建议使用的文档(https://realm.io/docs/java/latest/)" try-with-resources" (https://realm.io/docs/java/latest/#closing-realm-instances)。 所以每个Realm Transaction都在

之内
try (Realm realm = Realm.getDefaultInstance()) {
// No need to close the Realm instance manually
}

并在此块中使用

                realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    // do Something
                }
            });

总之:

try (Realm realm = Realm.getDefaultInstance()) {
 realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    // do Something
                }
            });
}

有人可以向我解释为什么会出现此警告吗?我甚至尝试添加一个finally块,我手动关闭Realm实例。但这并不能避免这种警告。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我结束了以下解决方案。在我的常规课程中,我使用了这样的try catch块:

try (Realm realm = Realm.getDefaultInstance()) {
   Repository.doSomething(realm);
} catch (Exception e){
   e.printStackTrace();
}

所以我在我的存储库类中使用了realm实例,并且在try catch块中返回数据后它们会被关闭。

感谢您的帮助!