在Activity之外调用Realm.close()

4
我希望将所有Realm操作(读/写)从Activity / Fragment(如大多数示例中实现的那样)移动到单独的类/层级中。
我的问题是,如果没有直接在Activity / Fragment中使用,何时何地应调用Realm.getInstance()和Realm.close()?有什么好的模式?
假设所有操作都可以在UI线程中执行,而不需要在AsyncTasks中执行。
谢谢。

这真的取决于你有什么样的架构,你能描述一下你正在尝试什么吗?你已经在做类似MVP或MVC的事情了吗?但通常你需要对Android生命周期有一些认识,以控制其他资源。 - Christian Melchior
谢谢Christian。我计划使用依赖注入(Dagger)和事件总线(Otto)来简化管理活动外的数据库操作,并通知活动数据已更新,以便可以刷新UI。 - user1838830
你是在建议我应该始终通知执行 Realm 操作的类,一个活动已经被创建/销毁,以便可以调用 getInstance() 和 close() 吗? - user1838830
1
是的,或者至少在没有任何打开的活动时。这可以通过在onStart期间递增计数器,在onStop期间递减计数器来完成。 - Christian Melchior
感谢 @ChristianMelchior。 - user1838830
1个回答

0
您可以将其放入一个辅助类中,如下所示:
public class RealmHelper {

  private static RealmHelper realmHelper;
  private static Realm realm;

  public static RealmHelper getInstance(Context context) {
    realm = Realm.getInstance(context);
    if(realmHelper == null) {
        realmHelper = new RealmHelper();
    }
    return realmHelper;
  }

  private RealmHelper() {
  }

  public void saveMy(MyModel my) {
    realm.beginTransaction();
    realm.copyToRealmOrUpdate(my);
    realm.commitTransaction();
  }
  ...

然后在需要的时候调用它:

...
RealmHelper realmHelper = RealmHelper.getInstance(getApplicationContext());
realmHelper.saveMy(my);
...

1
感谢。但这已经不再相关了,因为我们现在可以使用Realm.getDefaultInstance()来获取默认的realm实例,而无需传递上下文。Realm.getInstance(context)也将在版本0.88.0中被弃用。 - user1838830
是的,但你仍然需要插入 RealmConfiguration config = new RealmConfiguration.Builder(context).build(); 以及 Realm.setDefaultConfiguration(config);。 - powder366

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接