2017-07-27 14 views
0

レルムのJavaドキュメントにクローズ/無効のインスタンスを扱うが、レルムが開かれたようActivity/ライフサイクルにレルムインスタンスを関連付けることをお勧めします/ Activity/Fragmentが作成されたときに/破壊閉じました。レルムのライフサイクル - アンドロイド

Activityのユーザー対話が、最終的にActivityに関連付けられたレルムインスタンスで読み取り/書き込みを発行する一連の連鎖非同期/コールバックベースコードをトリガーするとします。

ユーザーはすぐに相互作用した後、活動を終了し、レルムインスタンスが閉じられたインスタンス上のトランザクション/クエリが、それは、ネストされたコールバックのことを考えると黙って失敗していることを確認するための良い方法であるもの、Activity'sonDestroyの一環として閉鎖された場合鎖。

レルムインスタンスをクローズ/有効にしてからメソッドを呼び出す前にチェックするのは面倒です。

同時に、レルムインスタンスを開いて、何かを書いたり読んだりするだけで閉じると、コストがかかるかもしれません。

これらのようなクラッシュを避けるにはどうすればよいでしょうか?

+0

'連鎖非同期/コールバックベースコード'は、独自のRealmインスタンス参照を取得できるバックラウンドサービスによって処理されます。 'これは、最終的に、そのアクティビティに関連付けられているレルムインスタンスの読み取り/書き込みを実行します。 'レルムに登録されているレルムオブザーバは、レルムのデータ変更に反応します。アクティビティが有効な場合、UIに変更が表示されます。死んだら誰も気にしない。 –

+0

すべてのレルムアクセスがバックグラウンドサービスに委任されるわけではありません。 – letronje

+1

なぜそれを考えるのか説明しなければならないでしょう。なぜあなたのケースではうまくいかないのですか?すべてのスレッドから同じ基礎データにアクセスします。 –

答えて

1

ここでの基本的な質問は、「デッドコンポーネントへのコールバックを防止するにはどうすればよいですか?その答えは、Realmのドキュメントhereにあります。コンポーネントが終了するときにリスナーの登録を解除する必要があります(,onStop、またはonDestroy)。

レルムが開いているかどうかの問題は、質問を正しく理解していれば赤ちゃんです。リスナーは登録を解除する必要があります。

+1

個人的に私は 'onDestroy'で登録を解除します。 – EpicPandaForce

関連する問題