如何正确使用Realm
How to correctly use 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();
}
}
我会在我的实用程序单例中创建一个 RealmInstanceGenerator 的静态最终对象 class 并在我的 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 class 的源代码在这里:https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java
我试图避免在我的 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();
}
}
我会在我的实用程序单例中创建一个 RealmInstanceGenerator 的静态最终对象 class 并在我的 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 class 的源代码在这里:https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java