如果我有这样的MainActivity:
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set up database
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
Realm.deleteRealm(realmConfiguration); // Clean slate
Realm.setDefaultConfiguration(realmConfiguration); // Make this Realm the default
realm = Realm.getDefaultInstance();
}
@Override
public void onDestroy() {
realm.close();
super.onDestroy();
}
}
我在另一个类(同一个线程)中使用realm.getDefaultInstance()
,如下所示:
public class ViewBookActivity extends Activity {
private Realm realm;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_result);
realm = Realm.getDefaultInstance();
}
}
我应该在realm.close()
的{{1}}中拨打onDestroy()
吗?或者在ViewBookActivity
中关闭它是否足够?
Realm文档说:
Realm实例是引用计数,这意味着如果你打电话 getIstance()在一个线程中两次,你还必须调用close() 两次。
但我不确定这是否适用于MainActivity
。
另外,如果我在写完文章时关闭它,即使在其他线程中也可以坚持getDefaultInstance()
吗?我真的不明白Realm.getDefaultInstance()
的潜在用法。
由于
答案 0 :(得分:7)
最佳做法是,如果您在onCreate
中打开王国,则应在onDestroy
的所有活动中再次关闭它,因为这意味着当您的所有活动都已关闭时,引用计数将达到0。因此,在您的情况下:是的,您应该同时使用MainActivity
和ViewBookActivity
关于Realm.getDefaultInstance()
。这只是Realm.getInstance(myConfig)
的简写,因此您还必须在close()
上调用Realm.getInstance(Context)
。
Realm.getInstance(new RealmConfiguration.Builder(context).build())
只是FormData()
的简写,旨在让您在小例子中轻松开始使用Realm。如果您打算创建更大的应用程序,则应手动创建配置。但我同意这可能令人困惑,我们应该考虑将它们全部删除。