Должен ли я закрывать область на основе потока или на использование / класс?

Если у меня есть 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() в onDestroy() в ViewBookActivity ? Или достаточно закрыть его в MainActivity ?

Документация в области гласит:

Экземпляры Realm подсчитываются по ссылке, что означает, что если вы дважды вызываете getInstance () в потоке, вам также придется вызвать close () в два раза.

Но я не уверен, что это относится к getDefaultInstance() .

Кроме того, нормально ли придерживаться Realm.getDefaultInstance() , даже в других потоках, если я Realm.getDefaultInstance() его, когда я закончил писать? Я действительно не понимаю потенциальное использование Realm.getInstance(Context context) .

благодаря

Лучшая практика заключается в том, что если вы откроете Realm in onCreate вы должны закрыть его снова в onDestroy во всех своих действиях, так как это означает, что счетчик ссылок достигнет 0, когда все ваши действия будут закрыты. Итак, в вашем случае: да, вы должны делать это как в MainActivity и в ViewBookActivity

Что касается Realm.getDefaultInstance() . Это всего лишь сокращение для Realm.getInstance(myConfig) , поэтому вам нужно также называть close() .

Realm.getInstance(Context) является просто сокращением для Realm.getInstance(new RealmConfiguration.Builder(context).build()) и предназначен для упрощения работы с Realm в небольших примерах. Если вы планируете создавать более крупное приложение, вы должны создать свою конфигурацию вручную. Но я согласен, что это может сбивать с толку, и мы должны, вероятно, рассмотреть возможность удаления всего этого.