【问题标题】:How to correctly use Realm如何正确使用 Realm
【发布时间】:2015-01-05 10:48:59
【问题描述】:

我试图避免在我的 android 应用程序中为每个片段创建和管理 Realm 对象。我认为 ThreadLocalVariable 可能是一个好的开始。

public class RealmInstanceGenerator extends ThreadLocal<Realm> {

    public Realm getRealmForMyThread(Context context) {

        if(get() == null && context != null)
            super.set(Realm.getInstance(context));

        return get();
    }

    public void setRealmForCurrentThread(Context context) {

        if(context != null)
            super.set(Realm.getInstance(context));
    }

    @Override
    protected Realm initialValue() {
        return null;
    }

    @Override
    public void remove() {
        if(get() != null) get().close();
        super.remove();
    }
}

我会在我的 utils 单例类中创建一个 RealmInstanceGenerator 的静态最终对象,并在我的 MainActivity 中调用 setRealmForCurrentThread。然后我会在我的活动结束时调用 remove 。对于任何新线程,都会自动生成一个新的 Realm 对象。 这是一个好策略吗?

【问题讨论】:

标签: android thread-local realm


【解决方案1】:

来自Realm的Christian。 这是一个很好的策略,幸运的是我们已经为你实现了它:) 所有 Realm 实例都已经缓存在 ThreadLocal 中,我们使用计数器跟踪实例。只有当计数器达到 0 时,Realm 才会完全关闭。

这意味着只要你总是调用 close() (你应该这样做),它实际上与你的 remove() 方法相同。

您可以在此处查看此示例中使用的模式:https://github.com/realm/realm-java/tree/master/examples/threadExample/src/main/java/io/realm/examples/threads

Realm 类的源代码在这里:https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java

【讨论】:

  • Realm 后端是基于 LMDB 的吗?是不是像 forntends 一样开源?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
相关资源
最近更新 更多