2016-05-06 5 views
0

Я немного смущен о том, как/когда/зачем закрывать экземпляры области. На протяжении всего моего приложения я никогда не вызывал .close() на свой экземпляр области, потому что, если я его закрываю, я больше не могу использовать объекты сферы, с которыми я общаюсь. Возможно, точка закрытия экземпляра области будет в моем приложении onDestroy() так же, как я создаю свой экземпляр в своем приложении onCreate(). На самом деле я играю с одним экземпляром Realm [*], созданным в моем приложении.Создание и закрытие экземпляров Realm

Является ли это (синглтон Realm) хорошим подходом? и что может случиться, если я никогда не закрою свое царство?

[*] На самом деле теперь я думаю о коллекции экземпляров Realm в коллекции Flywheight, вместо этого вместо экземпляра экземпляра на поток, так как теперь в моем приложении появился сервис Intent и вам нужно получить доступ к Realm из его потока. Я думаю здесь (в Service Intent), я могу закрыть область в onDestroy(), так как поток будет закончен, делая работу.

ответ

0

Realm обрабатывает кеширование внутри и делает его максимально возможным. Поэтому вы не должны бояться звонить Realm.getInstance(). Причина в том, что требуется close(), так это то, что вы можете рисковать утечкой памяти, которая в конечном итоге убьет ваше приложение.

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

Обратите внимание, что Application.onDestroy() не существует и Application.onTerminate() не вызывается для обычных приложений.

+0

первое спасибо за ваше время. Не могли бы вы объяснить немного больше о том, что риск утечки памяти, если не закрыть Королевство? Я начал сталкиваться с проблемами типа: «IllegalStateException: этот экземпляр Realm уже закрыт, что делает его непригодным» и доступ к Realm из неправильного потока. Заранее спасибо. –

+0

Царство выделяет ряд родных ресурсов под капотом. Не закрытие Realms будет поддерживать их, даже если они больше не нужны. Большая проблема заключается в том, что открытые Realms сохраняют версию, которую они используют, поэтому в потоках фона, которые не могут автоматически обновлять Realm, придется отслеживать больше изменений, которые переводят ваш файл Realm, увеличиваясь в размере больше, чем это должен. –

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