【问题标题】:Closing Realm instance in RealmBaseAdapter在 RealmBaseAdapter 中关闭 Realm 实例
【发布时间】:2016-07-21 17:02:49
【问题描述】:

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

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

但是,如果我想做类似的事情会发生什么

public class HelperListAdapter extends RealmBaseAdapter<Helper> implements ListAdapter {
    //...
    Realm realm = Realm.getDefaultInstance();
    //...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // ...
    }
}

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

【问题讨论】:

    标签: realm listadapter realm-base-adapter


    【解决方案1】:

    您链接的文档非常明确地说,为了维护生命周期,您应该在绑定到 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();
        }
    }
    

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

    public class RealmFragment extends Fragment {
        Realm realm;
    
        public RealmFragment() {
             setRetainInstance(true);
             realm = Realm.getDefaultInstance();
        }
    
        @Override
        public void onDestroy() {
             super.onDestroy();
             realm.close();
        }
    }
    

    【讨论】:

    • 感谢您的回答!我一直在阅读文档...但问题是我使用的是RealmBaseAdaptor&lt;&gt;,正如@Sung-Taek-Kim 提到的那样,它只是一种传输数据的模式。更大的问题是考虑如何不在这里阅读realm...
    • 您只需要提供来自 Realm 的结果集
    【解决方案2】:

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

    此外,未封闭的领域实例将消耗内存和 CPU 周期。完成后请考虑关闭它们。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      相关资源
      最近更新 更多