2016-05-09 3 views
6

Я использую realm для хранения и извлечения данных. Обычно, когда мы открываем область для хранения некоторых данных мы хотели:Как закрыть область, открытую Realm.getDefaultInstance?

Realm realm = Realm.getDefaultInstance(); 
realm.beginTransaction(); 
// Copy the object to Realm 
realm.copyToRealm(myObject); 
realm.commitTransaction(); 
realm.close(); 

в вышеупомянутом случае я закрывающий область.

Но когда я извлечение некоторых данных, такие как:

RealmResults<MyClass> results = Realm.getDefaultInstance().where(MyClass.class).findAll(); 

Как закрыть эту область? Нужно ли закрывать его?

ответ

13

Выполнение этого действия как однострочного означает, что вы не можете закрыть Царство, поэтому я бы советовал об этом.

Не закрывая Царство, в лучшем случае вы будете утечки памяти и иметь более высокий шанс быть убитым системой, если в фоновом режиме. В худшем случае вы увидите большой рост использования диска, поскольку Realm должен отслеживать все версии открытых экземпляров Realm (из-за базы данных MVCC).

Я бы очень советовал, используя ваш первый узор. Для получения дополнительной информации об управлении экземплярами Realm вы можете прочитать: https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances и https://realm.io/news/threading-deep-dive/

+0

Благодарим за разъяснения. –

+0

Но как насчет предупреждения в Logcat, кричащего 'Не забудьте вызвать close() во всех экземплярах Realm. Realm /data/data/com.foo.bar/files/default.realm завершается без закрытия, это может привести к исчерпанию собственной памяти. – zxcmehran

Смежные вопросы