关闭RealmBaseAdapter中的Realm实例

时间:2016-07-21 17:02:50

标签: realm listadapter realm-base-adapter

在Realm的Java文档here中,它提到最佳做法是:

  

...在所有活动和碎片中打开一个Realm实例,并在活动或碎片被销毁时再次关闭它。

但是,如果我想做像

这样的事情会发生什么
public class HelperListAdapter extends RealmBaseAdapter<Helper> implements ListAdapter {
    //...
    Realm realm = Realm.getDefaultInstance();
    //...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // ...
    }
}

那么在这种情况下我应该在哪里close()领域实例?

2 个答案:

答案 0 :(得分:2)

您链接的文档非常具体地说,为了维护生命周期,您应该在绑定到Activity生命周期的UI线程上创建Realm实例。

public class MyActivity extends Activity {
    private Realm realm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        realm = Realm.getDefaultInstance();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        realm.close();
    }
}

更好 - 使用保留的片段在Activity中保存Realm实例并使用构造函数和`onDestroy()。

public class RealmFragment extends Fragment {
    Realm realm;

    public RealmFragment() {
         setRetainInstance(true);
         realm = Realm.getDefaultInstance();
    }

    @Override
    public void onDestroy() {
         super.onDestroy();
         realm.close();
    }
}

答案 1 :(得分:0)

Java Adapter模式是提供在两个实体之间传输数据的方法,而不是为了保存和读取它。我要求您查看an example,其中Realm实例驻留在Activity / Fragment中,而适配器用于将值传输到Views。

此外,未闭合的域实例将消耗内存和CPU周期。一旦你完成,请考虑关闭它们。