gpt4 book ai didi

android - 我可以将 Realm.getDefaultInstance().executeTransaction([transaction]) 称为 "one-liner"吗?

转载 作者:可可西里 更新时间:2023-11-01 11:42:15 26 4
gpt4 key购买 nike

我一直在我正在开发的应用程序中使用 Realm,并且发现自己一次又一次地输入这种模式:

try (Realm realm = Realm.getDefaultInstance()) {
realm.executeTransaction(tRealm -> {
// Execute some transaction in here
});
}

虽然它并不十分丑陋,而且我喜欢 try-with-resources 为我关闭 realm 这一事实,但我发现自己想知道将其简化为这样的东西是否足够:

Realm.getDefaultInstance().executeTransaction(tRealm -> {
// Execute some transaction in here
}

我更喜欢这个,因为它少了一层嵌套,而且我不会为了调用 executeTransaction() 而获得 Realm 的实例,这会给我一个要使用的 Realm 的不同实例。

但我还没有切换到第二个 fragment ,因为我担心 Realm.getDefaultInstance() 部分会给我带来问题(因为我没有调用 close() 为它)。我的想法是否正确,因此应该继续使用第一个 fragment ,还是可以使用第二个 fragment ?

最佳答案

从某种意义上说,第二个 fragment 是有问题的,因为 Realm 保留了一个引用计数的缓存,该缓存用于确定何时应完全关闭底层资源,因此使用它意味着您保持底层资源打开,这可能会导致 OOM 错误。删除 Realm 或尝试迁移它时也会出现问题。

如果在后台线程上完成上述模式也很危险,因为您随后会在旧版本上保持 Realm 打开,这可能会导致文件大小增加,因为 Realm 必须跟踪多个版本:https://realm.io/docs/java/latest/#large-realm-file-size

如果在主线程上完成在技术上是安全的,但由于您在后台运行时不会释放资源,因此应用程序被系统杀死的可能性要高得多。

关于android - 我可以将 Realm.getDefaultInstance().executeTransaction([transaction]) 称为 "one-liner"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35804453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com