2016-05-06 6 views
0

レルムインスタンスをどのように/いつ/なぜ閉じるのかちょっと混乱します。私のアプリケーションの全体を通して、私はrealmインスタンス上で.close()を呼び出すことは一度もありません。なぜなら、私がそれを閉じると、もはや私が扱う領域オブジェクトを使用することができなくなるからです。おそらく、realmインスタンスを閉じるポイントは、アプリケーションonDestroy()にあります。私のアプリケーションでは、自分のインスタンスを作成するのと同じ方法でonCreate()です。実際には私のアプリケーションで作成されたRealm [*]のシングルトンインスタンスで遊んでいます。レルムインスタンスをインスタンシエートして閉じる

これは(レルムシングルトン)は良いアプローチですか?レルムを閉じないとどうなりますか?

[*]実際には、サービスインテントが自分のアプリでプレイするようになり、スレッドからRealmにアクセスする必要があるため、実際には、RealmインスタンスのFlywheightコレクションで、スレッドごとにインスタンスを格納することを考えています。私はここ(サービスインテント)で、スレッドが作業を終了するのでonDestroy()で領域を閉じることができると思います。

答えて

0

レルムはキャッシュを内部的に処理し、可能な限りパフォーマンスを向上させます。だから、Realm.getInstance()と呼ぶのを恐れるべきではありません。その理由は、close()が必要であるということです。それは、最終的にあなたのアプリを殺すメモリを漏らすリスクがあるかもしれないということです。

つまり、レルムのシングルトンやその他のキャッシングパターンを自分で作成しないでください。 あなたはここレルムのライフサイクルを制御するためのベストプラクティスについての詳細を読むことができます:https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances

注意をApplication.onDestroy()が存在しないとApplication.onTerminate()は、通常のアプリのために呼び出されていないこと。

+0

お時間を頂きましてありがとうございます。レルムを閉じないと、メモリリークの危険性のポイントをもう少し説明してください。私は型の問題に直面し始めました: "IllegalStateException:このRealmインスタンスはすでに閉じられており、使用できなくなりました"と間違ったスレッドからRealmにアクセスし始めました。前もって感謝します。 –

+0

レルムは、いくつかのネイティブリソースをフードの下に割り当てます。レルムを閉じないと、もはやそれらが必要なくなったとしても、それらを守ります。しかし、Realmが開いているバージョンでは、使用しているバージョンを保持しているため、Realmを自動更新しないバックグラウンドスレッドでは、Realmファイルに変換されるより多くの変更を追跡する必要があります〜する必要があります。 –

関連する問題