如何正确使用Realm

Dex*_*ter 5 android thread-local realm

我试图避免在我的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ior 21

来自境界的基督徒在这里.这是一个很好的策略,幸运的是我们已经为你实现了:)所有Realm实例都已经被缓存在ThreadLocal中,我们使用计数器跟踪实例.一旦计数器达到0,领域才会完全关闭.

这意味着只要你总是调用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