我是否必须基于每个线程或每个 usage/class-basis 关闭领域?
Do I have to close realm on a per thread-basis, or per usage/class-basis?
如果我有这样的 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();
}
}
我在另一个 class(同一个线程)中使用 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 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,则应在所有活动中的 onDestroy
中再次关闭它,因为这意味着当您的所有活动都关闭时,您的引用计数将达到 0 .所以在你的情况下:是的,你应该在 MainActivity
和 ViewBookActivity
中都这样做
关于Realm.getDefaultInstance()
。这只是 Realm.getInstance(myConfig)
的 shorthand,因此您还必须调用 close()
。
Realm.getInstance(Context)
只是 Realm.getInstance(new RealmConfiguration.Builder(context).build())
的 shorthand,旨在通过小示例让 Realm 入门变得非常容易。如果您打算创建一个更大的应用程序,您应该手动创建您的配置。但我同意它可能会造成混淆,我们或许应该考虑将其全部删除。
如果我有这样的 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();
}
}
我在另一个 class(同一个线程)中使用 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 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,则应在所有活动中的 onDestroy
中再次关闭它,因为这意味着当您的所有活动都关闭时,您的引用计数将达到 0 .所以在你的情况下:是的,你应该在 MainActivity
和 ViewBookActivity
关于Realm.getDefaultInstance()
。这只是 Realm.getInstance(myConfig)
的 shorthand,因此您还必须调用 close()
。
Realm.getInstance(Context)
只是 Realm.getInstance(new RealmConfiguration.Builder(context).build())
的 shorthand,旨在通过小示例让 Realm 入门变得非常容易。如果您打算创建一个更大的应用程序,您应该手动创建您的配置。但我同意它可能会造成混淆,我们或许应该考虑将其全部删除。