2016-05-09 9 views
6

私はレルムを使用してデータを格納および取得しています。通常、私たちはいくつかのデータを保存するために領域を開くとき、私たちは好きです:上記の場合、私は領域を閉じています: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

これを1ライナーとして実行すると、レルムを閉じることができないことを意味します。そのため、私はアドバイスをします。

レルムを閉じないと、メモリがリークし、バックグラウンドでシステムが殺される可能性が高くなります。最悪のケースでは、Realmは(MVCCデータベースであるために)開いているRealmインスタンスのすべてのバージョンを追跡する必要があるため、ディスク使用量が大幅に増加します。

私はあなたの最初のパターンを使用することを強く勧めます。 Realmインスタンスの制御の詳細については、https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instanceshttps://realm.io/news/threading-deep-dive/

+0

をご確認ください。 –

+0

しかし、すべてのRealmインスタンスで 'Remember to call()を呼び出すことを叫ぶLogcatの警告はどうでしょうか? Realm /data/data/com.foo.bar/files/default.realmがクローズされずにファイナライズされていると、ネイティブメモリーが不足する可能性があります。 – zxcmehran

関連する問題