アプリケーションのさまざまな部分で共有されるFlowableがあるとします。LiveDataReactiveStreamsを使用して作成したパブリッシャー
私はそれを観察したいところで、漏れやクラッシュを避けるためにLiveDataReactiveStreams.fromPublisher
のLiveDataに変換します。私は今、自分のFlowableをラップするLiveDataを持っています。
次に、(ViewModelFactoryの)ViewModelにLiveDataを渡します。私が理解する限り、私は先に進み、漏れを心配することなくLiveDataを使用することができます。
LiveDataを直接観察するのではなく、LiveDataReactiveStreams.toPublisher
とFlowable.fromPublisher
でFlowableに変換し、Flowableにサブスクライブしたいと思います。これは、現在、FlowableをラップするLiveDataをラップするFlowableです。
私の質問は:このFlowableへのサブスクリプションを処分することについて心配する必要はありますか?私の希望は、LiveDataが「障壁」として機能し、私のコンテキストがフロアブルのルートに漏れることを防ぐことですが、私はそのことについてはあまりよく分かりません。すなわち
:
- フロアブル各断片はグローバルコンテキスト
- に存在する、はフラグメントのプロパティとして設定されているLiveData Bに包まれているビューモデル
- 通常、私はLiveData Bを見ると、代わりにFlowableで囲みますC
- IはCを流動性フラグメントが破棄されるときまで漏れCにアクセス返さ使い捨て
ウィルビューを無視するようにサブスクライブ?
私はそれが私のために退会しないことを理解しますが、私の質問です:断片が破壊されたときに実際に漏れますか?もしそうなら、どこで/どのようにこのリークが起こるのでしょうか? –
あなたのサブスクリプションがパブリッシャーにリークします。 – tynn
私はこれまでのところあなたとお付き合いしていますが、フラグメントがGC:edの場合、パブリッシャーはGC:ed(サブスクリプションと一緒になりますか?私が見る限り、ここで作成されたすべての参照は循環的であり、漏れが起こらないようにするべきです(明らかに愚かなことをしない限り) –