如果我有这样的 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();
}
}
然后我应该在 ViewBookActivity
的 onDestroy()
中调用 realm.close()
吗?或者在 MainActivity
中关闭它就足够了吗?
Realm 文档说:
Realm instances are reference counted, which means that if you call getInstance() twice in a thread, you will also have to call close() twice as well.
但我不确定这是否适用于 getDefaultInstance()
。
此外,如果我在完成写入后关闭它,即使在其他线程中也可以坚持使用 Realm.getDefaultInstance()
吗?我不太了解 Realm.getInstance(Context context)
的潜在用法。
谢谢
最佳答案
最佳实践是,如果您在 onCreate
中打开 Realm,您应该在所有 Activity 中的 onDestroy
中再次关闭它,因为这意味着您的引用计数将达到 0 当所有你的 Activity 已经结束。所以在你的情况下:是的,你应该在 MainActivity
和 ViewBookActivity
关于 Realm.getDefaultInstance()
。这只是 Realm.getInstance(myConfig)
的简写,因此您还必须对它们调用 close()
。
Realm.getInstance(Context)
只是 Realm.getInstance(new RealmConfiguration.Builder(context).build())
的简写,旨在使其成为在小例子中真的很容易开始使用 Realm。如果您打算创建一个更大的应用程序,您应该手动创建您的配置。但我同意这可能会造成混淆,我们或许应该考虑将其全部删除。
关于android - 我是否必须在每个线程或每个使用/类的基础上关闭 Realm ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797790/