私は、アプリケーションがレルムデータベースを使用し、ChangeListenerが非同期クエリ結果に追加されるAndroidクラスを採用しています。ドキュメンテーションは、インスタンスが破棄された場合にメモリがリークしないように、リスナをonStartに追加してonStopで削除する必要があることを示しています。 dbコンフィグレーションとデフォルトインスタンスは、Applicationを拡張するクラスで宣言されているため、デフォルトのRealm dbインスタンスは保持されますが、クエリ結果は保持されますか?クエリの結果が持続しない場合、結果からリスナーを削除する必要があるのに対し、onClickListener(たとえば)では、リスナーを削除する必要はありません。レルムdb ChangeListener永続性 - メモリリーク
1
A
答えて
1
私はレルムの内部を知っているが、のは、控除を使用させないでください=)
アプリケーションは、限り、あなたのアプリケーションとして)生きるシングルトン(オブジェクトの1つのインスタンスです。
メンバとしてのRealm dbインスタンスは、Applicationオブジェクトと共に動作します。
アクティビティなどの呼び出し元は、結果にサブスクライブします(オブザーバーパターン - 「ねえ、私のために何かがあるときにpingしてください)。アクティビティがリスナーとして自分自身を追加するとき、アクティビティは参照を与えます。そのため、ガベージコレクタは設定変更後にアクティビティを取得できません(デバイスのローテーションなど)。
onStop - アクティビティが破壊される可能性があることを示すコールバックであるため、退会する必要があります(「私を保持しないでください」)。
1
です。 RealmChangeListener
をRealmResults
に追加すると、レルムがRealmResults
がGCedであることを検出した後にリスナーがGCされます。レルムはRealmResults
の弱い参照を保持し、ある時点で弱い参照をチェックします。 がRealm
に追加された場合、Realmインスタンスがクローズされた場合、またはremoveChangeListener
/removeAllChangeListeners
が呼び出された場合は削除されます。この場合、アプリケーションライフサイクルでRealmインスタンスを保持し、リスナーを手動で削除しないと、リークされます。
cpu/memリソースの浪費を避けるために、必要がなくなった場合は、一般的に削除することをお勧めします。
関連する問題
- 1. レルムの永続性のためのデザインパターン
- 2. IBM DB永続性モデル
- 3. レルム - オブジェクトマッピングと永続AnyObjectタイプ
- 4. ダスクのメモリリークやデータ永続性が分散
- 5. MBeanの永続性
- 6. 春:H2データベースの永続性
- 7. Backbone.jsデータ永続性
- 8. クライアントキューの永続性
- 9. ステートマシンの永続性
- 10. facebookチャットボックス永続性
- 11. SQL永続性サービス
- 12. DBの永続性を持たないシンプルなフォームの更新
- 13. Android SIPサービスの永続性
- 14. Jruby永続性問題
- 15. Pythonレジストリの永続性
- 16. Builderのパターンと永続性
- 17. Silverlightオブジェクトの永続性
- 18. elmのデータ永続性
- 19. Windowsサービス - オブジェクトの永続性
- 20. Fiware - Cygnus mongoSinkメタデータ永続性
- 21. コアデータの永続性アプリケーション
- 22. Paho Java - ファイルの永続性
- 23. Spring Statemachineの永続性
- 24. AWS名の永続性
- 25. iOS Swift - シングルトンデータの永続性
- 26. 軽量Groovy永続性
- 27. Qtペイントの永続性
- 28. データベース内のJava永続性
- 29. サービスファブリック - ステートフルサービスの永続性
- 30. 角2データの永続性
GCedを定義できますか? – JaeW
ガベージコレクション。以前の質問は無視してください。 – JaeW