我试图避免在我的android应用程序中为每个 fragment 创建和管理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。然后,当我的 Activity 终止时,我将致电remove。对于任何新线程,将自动生成一个新的Realm对象。
这是个好策略吗?

最佳答案

来自Realm的基督徒。
这是一个很好的策略,幸运的是我们已经为您实现了:)所有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

关于android - 如何正确使用Realm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27777948/

10-11 22:39
查看更多