Я использую Realm в проекте. Я построил эту RealmActivity, чтобы легко использовать Realm в коде с getActivity.getRealm().Использование Singleton для Realm в UI-Thread
public abstract class RealmActivity extends AppCompatActivity {
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
realm = Realm.getDefaultInstance();
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (!realm.isClosed()) {
realm.close();
}
}
public Realm getRealm() {
return realm;
}
Теперь я хочу удалить файл Realm, чтобы очистить данные для этого сеанса/пользователя. Для этого все RealmInstances должны быть закрыты. Я попытался запустить Logout-Activity с намерением очистить ActivityStack. Он отлично работает для моего Nexus 5 (Android 6), но не для моего Nexus 4 (Android 5).
Моя идея состояла в том, чтобы создать Singleton для RealmInstance, который используется в UI-Thread
public abstract class RealmActivity extends AppCompatActivity {
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
realm = ManagerLayer.getInstance().getRealm();
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
public Realm getRealm() {
return realm;
}
}
Теперь, я получил только один экземпляр и может закрыть перед удалением файла. Но я никогда не закрываю RealmInstance, когда я не выхожу из системы. Это проблема?
Но когда я очищаю ActivityStack и метод onDestroy() не вызывается, RealmInstance для Activity также никогда не закрывается. Правильно?
Могу ли я использовать Singleton для UI-Thread realmInstance? Я никогда не перехожу к другой теме и никогда не закрываю ее. Или есть еще одно решение закрыть все RealmInstances, чтобы удалить RealmFile?
Использование класса приложения - это то, как я это сделал, и предоставление ему публичного статического экземпляра. Но помните, что этот экземпляр работает только в потоке пользовательского интерфейса, для новых потоков вам нужен новый экземпляр. –
Я бы также проверил использование getInstance с помощью 'Thread.currentThread() == Looper.getMainLooper(). GetThread()' – droidpl