2016-03-04 2 views
2

Я использую Realm в приложении я в настоящее время развивается, и обнаружил, что печатала этот вид рисунка снова и снова:Можно ли вызвать Realm.getDefaultInstance(). ExecuteTransaction ([transaction]) как «однострочный»?

try (Realm realm = Realm.getDefaultInstance()) { 
    realm.executeTransaction(tRealm -> { 
     // Execute some transaction in here 
    }); 
} 

Хотя это не совсем некрасиво, и мне нравится тот факт, что попробовать-с-ресурсов закрывает realm для меня, я обнаружил, что интересно, если это будет достаточно, чтобы упростить что-то вроде этого:

Realm.getDefaultInstance().executeTransaction(tRealm -> { 
    // Execute some transaction in here 
} 

Я предпочел бы это так, потому что это один меньше уровня вложенности, и потому что я не получаю экземпляр Realm только для вызова executeTransaction(), который затем дает мне различные экземпляр царства для использования.

Но я не переключился на второй фрагмент, потому что я обеспокоен тем, что его часть вызовет проблемы (поскольку я не звоню close()). Правильно ли я в своих мыслях, и поэтому должен продолжать использовать первый фрагмент, или я буду в порядке использовать второй?

ответ

2

Второй фрагмент проблематичен в том смысле, что в Realm хранится отсчетный кеш ссылок, который используется для определения того, когда основные ресурсы должны быть полностью закрыты, поэтому использование этого означает, что вы держите базовые ресурсы открытыми, что может привести к ошибкам OOM , Это также проблематично при удалении Королевства или попытке его перенести.

выше модель также опасно, если сделано на фоне потока, как вы затем сохранить Realm открыт в старой версии, которая может привести к тому, размер файла, чтобы увеличить, как Realm должен отслеживать несколько версий: https://realm.io/docs/java/latest/#large-realm-file-size

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

+0

Ahh see, я решил, что подсчет ссылок будет проблемой, но я даже не думал о других вещах, которые вы указали. Я обязательно буду придерживаться первого шаблона, спасибо за быстрый и подробный ответ! –

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